Spring Boot 数据库 - 使用不同的数据库用户/Flyway 运行应用程序
Posted
技术标签:
【中文标题】Spring Boot 数据库 - 使用不同的数据库用户/Flyway 运行应用程序【英文标题】:Spring Boot Database - Running Application with different DB User / Flyway 【发布时间】:2020-07-06 13:16:31 【问题描述】:我的应用程序目前存在问题。这是一个 Spring Boot 应用程序,我通过 Flyway 创建数据库表。对于 Flyway,我创建了一个具有足够权限的数据库用户来创建数据库表。
对于应用程序,我想使用不同的 DB 用户 (APP_DB_USER) 来插入业务数据。
到目前为止,Flyway 脚本运行良好,并且正在创建表格 我还使用以下命令授予 APP_DB_USER 权限。 (在我的示例中,架构名称和用户名相同)
GRANT ALL ON DB_USER.TABLE1 TO APP_DB_USER;
在 SQL Developer 中,我可以在 DB_USER 表(例如 DB_USER.TABLE1)上使用 APP_DB_USER 运行 SELECT / INSERT 语句
我的问题现在出现在 Spring Boot 应用程序中。 我已经设置:
spring:
datasource:
url: DB_URL
username: APP_DB_USER
password: password
driver-class-name: oracle.jdbc.OracleDriver
initialization-mode: EMBEDDED
hikari:
connection-timeout: 20000
minimum-idle : 1
maximum-pool-size : 2
idle-timeout: 10000
max-lifetime: 1000
auto-commit: true
schema: DB_USER
应用程序正在正确启动,但是一旦我尝试保存实体,它就会给我错误消息
java.sql.SQLSyntaxErrorException: ORA-00942: Table or View not found
另外我尝试了以下属性
jpa:
show-sql: true
properties:
hibernate:
default_schema: DB_USER
dialect: org.hibernate.dialect.Oracle12cDialect
有没有人知道我做错了什么。 我如何通过 Flyway 创建不同的 DB_User 表,然后应用程序可以通过不同的 APP_DB_USER 使用这些表
【问题讨论】:
您确定应用和flyway迁移使用相同的架构吗? 【参考方案1】:Hikari 可能无法访问架构参数,因为它位于嵌套结构中。如果您有多个数据源,则可能会发生这种情况。以下解决方案对我有用:
在 application.yml 中
spring:
datasource:
url: DB_URL
username: APP_DB_USER
password: password
driver-class-name: oracle.jdbc.OracleDriver
initialization-mode: EMBEDDED
connection-timeout: 20000
minimum-idle : 1
maximum-pool-size : 2
idle-timeout: 10000
max-lifetime: 1000
auto-commit: true
schema: DB_USER
在 Application.class 中
@SpringBootApplication
public class Application
public static void main(String[] args)
SpringApplication.run(Application.class, args);
@Bean
@ConfigurationProperties(prefix = "spring.datasource")
public HikariConfig firstHikariConfig()
return new HikariConfig();
@Bean
public DataSource firstDataSource()
return new HikariDataSource(firstHikariConfig());
@Bean
public JdbcTemplate firstJdbcTemplate()
return new JdbcTemplate(firstDataSource());
@Bean
@ConfigurationProperties(prefix = "spring.datasource.second")
public HikariConfig secondHikariConfig()
return new HikariConfig();
@Bean
public DataSource secondDataSource()
return new HikariDataSource(secondHikariConfig());
@Bean
public JdbcTemplate secondJdbcTemplate()
return new JdbcTemplate(secondDataSource());
【讨论】:
以上是关于Spring Boot 数据库 - 使用不同的数据库用户/Flyway 运行应用程序的主要内容,如果未能解决你的问题,请参考以下文章
连接到多个 mongo db 主机并在 spring boot 中使用不同的数据库进行身份验证
使用Spring Boot JPA Specification实现使用JSON数据来查询实体数据