[英]Configure OracleDataSource programmatically in Spring Boot with a default schema
如何使用默认模式在 Spring Boot 中以编程方式配置 Oracle DataSource?
@Bean
public DataSource getDataSource() throws SQLException {
OracleDataSource d = new OracleDataSource();
d.setURL(Secrets.get("DB_URL"));
d.setUser(Secrets.get("DB_USER"));
d.setPassword(Secrets.get("DB_PASS"));
// d.setSchema(System.getenv("DB_SCHEMA")); ???
return d;
}
您不能更改OracleDataSource
的架构或使用连接 URL,您需要执行
ALTER SESSION SET CURRENT_SCHEMA=targetschema;
本答案中解释的声明。 根据Oracle JDBC 驱动程序识别的连接属性,初始模式没有驱动程序属性。
尝试将 sql 执行添加到数据源创建方法中
@Bean
public DataSource getDataSource() throws SQLException {
OracleDataSource d = new OracleDataSource();
d.setURL(Secrets.get("DB_URL"));
d.setUser(Secrets.get("DB_USER"));
d.setPassword(Secrets.get("DB_PASS"));
Resource initSchema = new ClassPathResource("scripts/schema-alter.sql");
DatabasePopulator databasePopulator = new ResourceDatabasePopulator(initSchema);
DatabasePopulatorUtils.execute(databasePopulator, dataSource);
return d;
}
在 scripts/schema-alter.sql 中将是这段代码
ALTER SESSION SET CURRENT_SCHEMA=targetschema;
完整示例:
@Bean
public DataSource getDataSource() throws SQLException {
OracleDataSource oracleDs = new OracleDataSource();
oracleDs.setURL(Secrets.get("DB_URL"));
oracleDs.setUser(Secrets.get("DB_USER"));
oracleDs.setPassword(Secrets.get("DB_PASS"));
// other Oracle related settings...
HikariDataSource hikariDs = new HikariDataSource();
hikariDs.setDataSource(oracleDs);
hikariDs.setConnectionInitSql("ALTER SESSION SET CURRENT_SCHEMA = MY_SCHEMA");
return hikariDs;
}
在 Spring Boot 2 中,可以在 application.properties 文件中使用以下属性设置想要的架构:
spring.datasource.hikari.connection-init-sql=ALTER SESSION SET CURRENT_SCHEMA = MY_SCHEMA
HikariCP 是 Spring Boot 2 中的默认连接池。要查看日志文件中的所有 HikariCP 设置(包括“connectionInitSql”),还要在 application.properties 中添加以下内容:
logging.level.com.zaxxer.hikari=DEBUG
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.