Javascript 使用microsoft sql server进行spring引导多数据库配置
我在一个sql server数据库下有多个数据库。 从application.properties文件。我已经在springboot中配置为默认模式。 现在我想切换到另一个具有相同url的数据库,usrname,pawd 我该怎么做?当我在课堂上用Javascript 使用microsoft sql server进行spring引导多数据库配置,javascript,sql-server,spring,spring-boot,Javascript,Sql Server,Spring,Spring Boot,我在一个sql server数据库下有多个数据库。 从application.properties文件。我已经在springboot中配置为默认模式。 现在我想切换到另一个具有相同url的数据库,usrname,pawd 我该怎么做?当我在课堂上用 @table (name = db2.dbo.tname) 它抛出了一个错误的说法 无法在数据库1中映射此数据库项目 以下是我的配置: spring.datasource.url=jdbc:sqlserver://localhost:1433;da
@table (name = db2.dbo.tname)
它抛出了一个错误的说法
无法在数据库1中映射此数据库项目
以下是我的配置:
spring.datasource.url=jdbc:sqlserver://localhost:1433;databaseName=testdb;integratedSecurity=false;
spring.datasource.username=sa
spring.datasource.password=myPassword
spring.datasource.driverClassName=com.microsoft.sqlserver.jdbc.SQLServerConnection
spring.datasource.initialize=true
我的应用程序使用我在应用程序属性上提供的默认数据库。但我必须连接到另一个数据库。
我如何解决这个问题 不能使用常规弹簧特性来执行此操作。下面是一个示例,说明如何连接到两个数据库(如果需要,可以连接更多数据库): 首先,您必须禁用仅拾取一个DB的自动配置:
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
现在,您只需为JPA和数据源提供自己的配置:
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "ds1EntityManagerFactory",
transactionManagerRef = "ds1TransactionManager",
basePackageClasses = Ds1Repository.class)
public class DataSource1Config {
@Bean
PlatformTransactionManager ds1TransactionManager() {
return new JpaTransactionManager(tfccgEntityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean ds1EntityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(ds1());
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setPackagesToScan(Ds1Entity.class.getPackage().getName());
factoryBean.getJpaPropertyMap().put("hibernate.dialect", dialect);
factoryBean.getJpaPropertyMap().put("hibernate.show_sql", showSQL);
factoryBean.getJpaPropertyMap().put("hibernate.globally_quoted_identifiers", quoteIdentifiers);
return factoryBean;
}
@Bean
DataSource ds1() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClass);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setMaxTotal(maxTotal);
dataSource.setInitialSize(initialSize);
dataSource.setMaxIdle(maxIdle);
return dataSource;
}
}
您可以为ds2
数据源创建该类的副本,在该数据源上,您将拥有第二组transactionManager
datasource
,并在其上为不同的包启用JPA存储库和实体扫描,并使用不同的名称命名bean
然后,如果在方法中需要事务隔离,则必须提供transactionManager
名称,因为您有2个:
@Transactional(transactionManager=“ds1TransactionManager”)
您不能使用常规的spring属性来执行此操作。下面是一个示例,说明如何连接到两个数据库(如果需要,可以连接更多数据库):
首先,您必须禁用仅拾取一个DB的自动配置:
@EnableAutoConfiguration(exclude = {DataSourceAutoConfiguration.class, HibernateJpaAutoConfiguration.class, DataSourceTransactionManagerAutoConfiguration.class})
现在,您只需为JPA和数据源提供自己的配置:
@Configuration
@EnableJpaRepositories(entityManagerFactoryRef = "ds1EntityManagerFactory",
transactionManagerRef = "ds1TransactionManager",
basePackageClasses = Ds1Repository.class)
public class DataSource1Config {
@Bean
PlatformTransactionManager ds1TransactionManager() {
return new JpaTransactionManager(tfccgEntityManagerFactory().getObject());
}
@Bean
LocalContainerEntityManagerFactoryBean ds1EntityManagerFactory() {
HibernateJpaVendorAdapter vendorAdapter = new HibernateJpaVendorAdapter();
LocalContainerEntityManagerFactoryBean factoryBean = new LocalContainerEntityManagerFactoryBean();
factoryBean.setDataSource(ds1());
factoryBean.setJpaVendorAdapter(vendorAdapter);
factoryBean.setPackagesToScan(Ds1Entity.class.getPackage().getName());
factoryBean.getJpaPropertyMap().put("hibernate.dialect", dialect);
factoryBean.getJpaPropertyMap().put("hibernate.show_sql", showSQL);
factoryBean.getJpaPropertyMap().put("hibernate.globally_quoted_identifiers", quoteIdentifiers);
return factoryBean;
}
@Bean
DataSource ds1() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl(url);
dataSource.setDriverClassName(driverClass);
dataSource.setUsername(username);
dataSource.setPassword(password);
dataSource.setTestOnBorrow(testOnBorrow);
dataSource.setMaxTotal(maxTotal);
dataSource.setInitialSize(initialSize);
dataSource.setMaxIdle(maxIdle);
return dataSource;
}
}
您可以为ds2
数据源创建该类的副本,在该数据源上,您将拥有第二组transactionManager
datasource
,并在其上为不同的包启用JPA存储库和实体扫描,并使用不同的名称命名bean
然后,如果在方法中需要事务隔离,则必须提供transactionManager
名称,因为您有2个:
@Transactional(transactionManager=“ds1TransactionManager”)
在数据源url中