java初始化多行数据_java – Spring Boot 2多个数据源初始化模式

我有一个Spring Boot 2应用程序,它使用两个数据源 – 一个Oracle和一个H2. H2数据源设置为辅助数据源,我想在启动时为它创建模式,但它永远不会触发schema.sql文件.这是我的数据源配置文件:

@Configuration

public class DataSourceConfig {

@Bean

@Primary

@ConfigurationProperties("spring.datasource")

public DataSourceProperties primaryDataSourceProperties() {

return new DataSourceProperties();

}

@Bean

@Primary

@ConfigurationProperties("spring.datasource")

public DataSource primaryDataSource() {

return primaryDataSourceProperties().initializeDataSourceBuilder().build();

}

@Bean

@ConfigurationProperties("spring.runlogdatasource")

public DataSourceProperties runlogDataSourceProperties() {

return new DataSourceProperties();

}

@Bean

@ConfigurationProperties("spring.runlogdatasource")

public DataSource runlogDataSource() {

return runlogDataSourceProperties().initializeDataSourceBuilder().build();

}

}

这是我的application.properties文件:

spring.datasource.url=jdbc:oracle:thin:@my.database.com:1521/mydb

spring.datasource.username=test

spring.datasource.password=ENC(3PXcnoBndLpWN1EcMtmIn+odOwhdWjSrqANijutxuekKEIOco64Jew==)

spring.datasource.driver-class-name=oracle.jdbc.driver.OracleDriver

spring.datasource.initialization-mode=never

spring.datasource.hikari.connection-timeout=60000

spring.datasource.hikari.maximum-pool-size=10

jasypt.encryptor.bean=stringEncryptor

spring.runlogdatasource.url=jdbc:h2:~/runlogdb;CIPHER=AES;DB_CLOSE_ON_EXIT=FALSE;

spring.runlogdatasource.username=sa

spring.runlogdatasource.password=ENC(3PXcnoBndLpWN1EcMtmIn+odOwhdWjSrqANijutxuekKEIOco64Jew==)

spring.runlogdatasource.driverClassName=org.h2.Driver

spring.runlogdatasource.platform=h2

spring.runlogdatasource.schema=classpath:schema-h2.sql

对于主数据源,我可以看到它进入DataSourceInitializerInvoker,它正在尝试加载模式,但由于没有schema-all.sql文件,它会跳过该模式.但是,我确实有一个schema-h2.sql文件,但对于辅助数据源,它从不进入DataSourceInitializerInvoker,因此从不尝试初始化模式.任何帮助将不胜感激!

解决方法:

这是预期的行为.指定主数据源时,仅执行此数据源的模式和数据.为了产生这种行为,您需要做的是为两个数据源中的每一个定义DataSourceInitializer.

@Bean

public DataSourceInitializer dataSourceInitializer1(@Qualifier("datasource1") DataSource datasource) {

ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();

resourceDatabasePopulator.addScript(new ClassPathResource("schema-h22.sql"));

resourceDatabasePopulator.addScript(new ClassPathResource("data-h22.sql"));

DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();

dataSourceInitializer.setDataSource(datasource);

dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);

return dataSourceInitializer;

}

@Bean

public DataSourceInitializer dataSourceInitializer2(@Qualifier("datasource2") DataSource datasource) {

ResourceDatabasePopulator resourceDatabasePopulator = new ResourceDatabasePopulator();

resourceDatabasePopulator.addScript(new ClassPathResource("schema-h21.sql"));

resourceDatabasePopulator.addScript(new ClassPathResource("data-h21.sql"));

DataSourceInitializer dataSourceInitializer = new DataSourceInitializer();

dataSourceInitializer.setDataSource(datasource);

dataSourceInitializer.setDatabasePopulator(resourceDatabasePopulator);

return dataSourceInitializer;

}

您还需要禁用默认的弹簧数据初始化.你可以通过spring.datasource.initialization-mode = never来做到这一点

标签:java,spring,spring-boot,database,initialization

来源: https://codeday.me/bug/20191008/1871199.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值