我认为最简单的方法是通过Spring中的配置文件来管理所有内容。
我使用application.yml实现了这一点。我还使用了Hikari连接池,但这并不会对配置产生太大影响。
以下是一个包含3个配置文件的application.yml示例,并且我定义了其中两个作为示例。
spring:
profiles:
include: dev,test,production
active: dev
---
spring:
profiles: dev
oms:
omsDataSource:
driverClassName: com.informix.jdbc.IfxDriver
jdbcUrl: jdbc:informix-sqli://devdb:9000/hol:INFORMIXSERVER=m_tcp_1;client_deve=en_US.8859-1;db_deve=en_US.8859-1;LOBCACHE=-1
password: oms
username: oms
connectionTestQuery: select count(*) from systables
maximumPoolSize: 5
---
spring:
profiles: test
oms:
omsDataSource:
driverClassName: com.informix.jdbc.IfxDriver
jdbcUrl: jdbc:informix-sqli://testdb:9000/hol:INFORMIXSERVER=m_tcp_1;client_deve=en_US.8859-1;db_deve=en_US.8859-1;LOBCACHE=-1
password: oms
username: oms
connectionTestQuery: select count(*) from systables
maximumPoolSize: 5
在我的数据库配置类中,我设置了JPA存储库,并告诉它使用哪个entityManager。我还设置了配置属性以从application.yml中提取。这意味着它将根据应用程序在启动时使用的配置文件替换详细信息。
@EnableJpaRepositories(entityManagerFactoryRef = "entityManagerFactoryOms",
transactionManagerRef = "transactionManagerOms",
basePackages= "persistence.oms")
@Configuration
@ConfigurationProperties(prefix = "oms.omsDataSource")
public class omsDbConfig extends HikariConfig {
@Bean
public HikariDataSource orcaDataSource() throws SQLException {
return new HikariDataSource(this);
}
@Bean(name = "entityManagerFactoryOms")
public LocalContainerEntityManagerFactoryBean entityManagerFactoryOrca() throws SQLException {
JpaVendorAdapter adapter = new HibernateJpaVendorAdapter();
Properties props = new Properties();
props.setProperty("hibernate.dialect","org.hibernate.dialect.InformixDialect");
LocalContainerEntityManagerFactoryBean emfb =
new LocalContainerEntityManagerFactoryBean();
emfb.setDataSource(orcaDataSource());
emfb.setPackagesToScan("persistence.oms");
emfb.setJpaProperties(props);
emfb.setJpaVendorAdapter(adapter);
return emfb;
}
}
实体和存储库的定义通常是正常的,没有什么特别之处。DB将根据我告诉它运行的任何配置文件切换连接。
我只需在application.yml中切换active
配置文件到我需要的任何一个。
安全注意事项:定义一个生产配置文件,不要将生产设置为默认配置文件。