Spring Boot数据库-使用不同的DB用户/Fireway运行应用程序



我的应用程序当前有问题。这是一个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 

有人知道我做错了什么吗。如何使用不同的DB_User表通过Flyway创建,然后由应用程序通过不同的APP_DB_User 使用

Hikari可能无法访问模式参数,因为它位于嵌套结构中。如果您有多个数据源,则可能会发生这种情况。以下解决方案对我有效:

在应用程序中.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

在应用程序中.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());
}
}

最新更新