在 Spring Boot 中使用默认模式以编程方式配置 OracleDataSource

     2023-03-27     294

关键词:

【中文标题】在 Spring Boot 中使用默认模式以编程方式配置 OracleDataSource【英文标题】:Configure OracleDataSource programmatically in Spring Boot with a default schema 【发布时间】:2018-07-12 16:29:36 【问题描述】:

如何在 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;

【问题讨论】:

是否可以使用 application.properties 文件进行配置或需要手动创建数据源? 我在 spring 配置文件参考 spring.datasource.schema 中看到了良好的属性,但不幸的是,无法弄清楚如何以编程方式应用它。 (需要手动创建数据源) 好的,没问题 【参考方案1】:

OracleDataSource中的schema不能更改或者使用连接URL,需要执行

ALTER SESSION SET CURRENT_SCHEMA=targetschema;

this answer 中解释的声明。根据Connection Properties Recognized by Oracle JDBC Drivers,初始模式没有驱动程序属性。

【讨论】:

感谢卡罗尔的回答。我知道这个alter session trick,但是我需要在连接初始化时找到一个放置这个sql的好地方。你能推荐这个吗? @Daryl 是否必须使用OracleDataSource?其他池库对此有一个属性,例如HiakriCP 提供connectionInitSql 配置属性 感谢卡罗尔的建议。看起来 HikariDataSource 完成了我需要的工作。它有数据源包装方法和connectionInitSqlHikariDataSource hikariDs = new HikariDataSource(); hikariDs.setDataSource(oracleDs); hikariDs.setConnectionInitSql("ALTER SESSION SET CURRENT_SCHEMA = SOME_SCHEMA"); 接受您的回答。请相应更新。【参考方案2】:

尝试将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;

【讨论】:

感谢马克西姆的回答。 HikariDataSource 更适合我们的目的。投票赞成你的答案。 @Daryl 哦,我不知道我们有能力改变 dataSources 的实现。我很高兴这个答案对你有所帮助) 是否会为来自该数据源的每个新连接运行schema-alter.sql【参考方案3】:

完整示例:

@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;

【讨论】:

您不需要实例化 OracleDataSource,只要 HikariDataSource 使用适当的设置即可。【参考方案4】:

在 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

【讨论】:

在 Spring Boot 应用程序中以编程方式重新启动 HikariPool?

】在SpringBoot应用程序中以编程方式重新启动HikariPool?【英文标题】:ProgrammaticallyrestartHikariPoolinSpringBootapplication?【发布时间】:2020-12-0616:28:52【问题描述】:我有一个使用Hibernate和HikariDataSource/HikariPool与数据库对话的SpringBoot应... 查看详情

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

】如何使用SpringBoot以编程方式确定当前的活动配置文件[重复]【英文标题】:HowtodetermineprogrammaticallythecurrentactiveprofileusingSpringboot[duplicate]【发布时间】:2015-04-0803:46:26【问题描述】:有没有办法以编程方式在我的bean中获取当前... 查看详情

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

】如何使用SpringBoot以编程方式确定当前的活动配置文件[重复]【英文标题】:HowtodetermineprogrammaticallythecurrentactiveprofileusingSpringboot[duplicate]【发布时间】:2015-04-0803:46:26【问题描述】:有没有办法以编程方式在我的bean中获取当前... 查看详情

如何以编程方式从 spring-boot-actuator 获取指标?

】如何以编程方式从spring-boot-actuator获取指标?【英文标题】:howtogetmetricsfromspring-boot-actuatorprogrammatically?【发布时间】:2015-11-2916:26:28【问题描述】:我们有一个生产中的弹簧应用程序。它不是Spring-boot。我找到了thispost,了解... 查看详情

如何使用ajax以编程方式在嵌套模式对话框中更改引导选择2中的默认选择选项?

】如何使用ajax以编程方式在嵌套模式对话框中更改引导选择2中的默认选择选项?【英文标题】:Howtochangedefaultselectedoptioninbootstrapselect2innestedmodaldialogprogrammaticallywithajax?【发布时间】:2019-05-0418:13:24【问题描述】:我有一个带有... 查看详情

Spring Boot 以编程方式设置配置文件

】SpringBoot以编程方式设置配置文件【英文标题】:SpringBootProgrammaticallysettingprofiles【发布时间】:2015-09-2420:45:05【问题描述】:如何在SpringBoot应用程序中设置活动配置文件。此应用程序将部署在独立的Tomcat中。我有2个属性文件a... 查看详情

如何使用 spqr-spring-boot-starter 在 graphql 中获取模式文件?

】如何使用spqr-spring-boot-starter在graphql中获取模式文件?【英文标题】:Howtogetaschemafileingraphqlusingspqr-spring-boot-starter?【发布时间】:2020-11-1607:03:40【问题描述】:谁能帮助我如何使用spqr-spring-boot-starter获取架构文件?我在网上寻... 查看详情

使用 spring-boot 以编程方式添加另一个属性资源配置器

】使用spring-boot以编程方式添加另一个属性资源配置器【英文标题】:AddanotherPropertyResourceConfigurerprogramaticallywithspring-boot【发布时间】:2014-12-3109:51:47【问题描述】:我们正在使用gradle、groovy和spring-boot建立一个高级/复杂的多模... 查看详情

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

】如何使用SpringBoot以编程方式确定当前的活动配置文件[重复]【英文标题】:HowtodetermineprogrammaticallythecurrentactiveprofileusingSpringboot[duplicate]【发布时间】:2015-04-0803:46:26【问题描述】:有没有办法以编程方式获取我的bean中的当前... 查看详情

如何使用 Spring Boot 以编程方式确定当前的活动配置文件 [重复]

】如何使用SpringBoot以编程方式确定当前的活动配置文件[重复]【英文标题】:HowtodetermineprogrammaticallythecurrentactiveprofileusingSpringboot[duplicate]【发布时间】:2015-04-0803:46:26【问题描述】:有没有办法以编程方式获取我的bean中的当前... 查看详情

使用 Flyway 和 Spring Boot 在 docker testcontainers 环境中迁移模式

】使用Flyway和SpringBoot在dockertestcontainers环境中迁移模式【英文标题】:MigratingschemasindockertestcontainersenvironmentusingFlywayandSpringboot【发布时间】:2020-02-0903:35:48【问题描述】:我正在尝试在SpringBoot应用程序中使用testcontainers和flyway... 查看详情

javers, Spring Boot, PostgreSql

】javers,SpringBoot,PostgreSql【英文标题】:【发布时间】:2018-12-1716:31:46【问题描述】:如何使用SpringBoot2.x和Postgresql配置Javers,以便在特定模式(名为dbo)而不是数据库的默认“公共”模式中创建javers表?【问题讨论】:我使用以... 查看详情

如何在 Spring Boot Thymeleaf 列表中使用 Bootstrap 模式?

】如何在SpringBootThymeleaf列表中使用Bootstrap模式?【英文标题】:HowtouseBootstrapModalswithSpringBootThymeleafList?【发布时间】:2021-06-2814:29:12【问题描述】:我列出了我的用户。它完美运行,每个用户都有自己的Bootstrap卡。但是当我点... 查看详情

如何以编程方式覆盖 Spring Boot application.properties?

】如何以编程方式覆盖SpringBootapplication.properties?【英文标题】:HowcanIoverrideSpringBootapplication.propertiesprogrammatically?【发布时间】:2015-05-1807:40:11【问题描述】:我有从外部配置web服务获取的jdbc属性文件在SpringBoot中,为了设置mysq... 查看详情

如何通过使用 JPA + Hibernate 和 Spring-boot 在一个数据库中使用多个模式?

】如何通过使用JPA+Hibernate和Spring-boot在一个数据库中使用多个模式?【英文标题】:Howtousemultipleschema\'sinonedatabasebyusingJPA+HibernatewithSpring-boot?【发布时间】:2018-11-1812:48:44【问题描述】:我需要它在一个数据库(MySQL)中访问2个... 查看详情

以编程方式重新启动 Spring Boot 应用程序/刷新 Spring 上下文

】以编程方式重新启动SpringBoot应用程序/刷新Spring上下文【英文标题】:ProgrammaticallyrestartSpringBootapplication/RefreshSpringContext【发布时间】:2017-01-1602:31:05【问题描述】:我正在尝试以编程方式重新启动我的Spring应用程序,而无需... 查看详情

Spring Boot如何在属性文件中隐藏密码

】SpringBoot如何在属性文件中隐藏密码【英文标题】:SpringBoothowtohidepasswordsinpropertiesfile【发布时间】:2016-09-2103:26:33【问题描述】:SpringBoot使用属性文件,至少默认情况下,密码是纯文本的。是否有可能以某种方式隐藏/解密这... 查看详情

spring boot 在 application.properties 中使用 spring.profile.default 时未加载默认配置文件

】springboot在application.properties中使用spring.profile.default时未加载默认配置文件【英文标题】:springbootnotloadingdefaultprofilewhileusingspring.profile.defaultinapplication.properties【发布时间】:2020-02-1309:59:26【问题描述】:仅供参考:我发誓没有... 查看详情