我正在开发一个Spring MVC 4应用程序,这里是我的一个JPAConfig,我必须配置两个不同的数据源这里是类和数据源的定义:
@Configuration
@EnableJpaRepositories(basePackageClasses = MassaContratos.class, enableDefaultTransactions = false,
entityManagerFactoryRef = "entityManagerFactory08",transactionManagerRef = "transactionManager08")
@EnableTransactionManagement
public class JPAConfig08 {
@Bean
public DataSource dataSource08() {
JndiDataSourceLookup dataSourceLookup = new JndiDataSourceLookup();
dataSourceLookup.setResourceRef(true);
return dataSourceLookup.getDataSource("jdbc/DB08");
}
@Bean
public JpaVendorAdapter jpaVendorAdapter08() {
HibernateJpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
adapter.setDatabase(Database.ORACLE);
adapter.setShowSql(false);
adapter.setGenerateDdl(false);
adapter.setDatabasePlatform("org.hibernate.dialect.OracleDialect");
return adapter;
}
@Bean
public EntityManagerFactory entityManagerFactory08() {
LocalContainerEntityManagerFactoryBean factory = new LocalContainerEntityManagerFactoryBean();
factory.setDataSource(dataSource08());
factory.setJpaVendorAdapter(jpaVendorAdapter08());
factory.setPackagesToScan(MassaContrato.class.getPackage().getName());
factory.afterPropertiesSet();
return factory.getObject();
}
@Bean
public PlatformTransactionManager transactionManager08() {
JpaTransactionManager transactionManager = new JpaTransactionManager();
transactionManager.setEntityManagerFactory(entityManagerFactory08());
return transactionManager;
}
}
我需要做的事情,我不知道该怎么办......如何改变这个
dataSourceLookup.getDataSource("jdbc/DB08");
从其他数据库配置中挑选
例如:
dataSourceLookup.getDataSource("jdbc/DB08-dev");
我需要动态更改数据源。
答案 0 :(得分:0)
我不确定你是否能够做到这一点,因为这不是JNDI想要实现的目标。
JNDI将配置推迟到容器。这样,无论运行什么环境,您的JNDI名称都是相同的。容器配置。确定JNDI名称指向哪个数据库。
答案 1 :(得分:0)
如果您有多个预配置数据源,AbstractRoutingDataSource可能会对您有所帮助。
以下是一个很好的例子:http://fedulov.website/2015/10/14/dynamic-datasource-routing-with-spring/