Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/spring-boot/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Spring boot JHipster H2 DB非管理员用户_Spring Boot_Jhipster_H2_Liquibase - Fatal编程技术网

Spring boot JHipster H2 DB非管理员用户

Spring boot JHipster H2 DB非管理员用户,spring-boot,jhipster,h2,liquibase,Spring Boot,Jhipster,H2,Liquibase,我试图用一个非管理员用户运行我的spring boot/liquibase/H2数据库,但在理解如何运行时遇到了一些问题 首先,我看到了一些信息,并试图通过这种方式设置我的application.yml 数据源: 类型:com.zaxxer.hikari.HikariDataSource url:jdbc:h2:mem:test 用户名:USERLIMITED 密码:user_limited_密码 液化: 上下文:dev,faker 用户:LiquibaSeuser 密码:liquibsepas

我试图用一个非管理员用户运行我的spring boot/liquibase/H2数据库,但在理解如何运行时遇到了一些问题

首先,我看到了一些信息,并试图通过这种方式设置我的application.yml

数据源:
类型:com.zaxxer.hikari.HikariDataSource
url:jdbc:h2:mem:test
用户名:USERLIMITED
密码:user_limited_密码
液化:
上下文:dev,faker
用户:LiquibaSeuser
密码:liquibsepassword
还要将这些sql语句放在changelog中运行,以便创建我想要的用户并提供适当的访问控制:

删除存在的用户USERLIMITED
创建用户USERLIMITED密码“USER\u limited\u PASSWORD”
将应用程序上的所有内容授予USERLIMITED
尝试启动应用程序时,出现以下错误:

2020-10-21 14:41:18.532调试8704---[restartedMain]c.c.config.Liquibase配置:配置Liquibase
2020-10-21 14:41:18.617警告8704---[test-task-1]i.g.j.c.liquibase.asynchronicspringluibase:异步启动liquibase时,您的数据库可能不可用
启动时准备好!
2020-10-21 14:41:20.226错误8704---[restartedMain]com.zaxxer.hikari.pool.HikariPool:hikari-池初始化期间出现异常。
org.h2.jdbc.jdbcsqlvalidauthorizationspecexception:用户名或密码错误[28000-200]
有趣的是,如果我将
LiquibaseConfiguration
文件更改为使用同步DB配置而不是异步配置,那么默认情况下我不会得到错误

//如果您不希望Liquibase异步启动,请用以下内容替代:
SpringLiquibase liquibase=SpringLiquibaseUtil.createSpringLiquibase(liquibasSource.getIfAvailable(),LiquibasProperties,dataSource.getIfUnique(),dataSourceProperties);
//SpringLiquibase-liquibase=SpringLiquibaseUtil.createAsynchSpringLiquibase(this.env,executor,LiquibasAtasource.getIfAvailable(),LiquibasProperties,dataSource.getIfUnique(),dataSourceProperties);
然后,如果我转到H2控制台并执行查询以查看我的用户,我只有一个管理员用户(应该是非管理员)

尝试以我在yml中设置的liquibase用户身份登录

用户:LiquibaSeuser
密码:liquibsepassword
不存在,我得到了
错误的用户名或密码[28000-200]
错误

这让我相信,这与应用程序如何启动以及异步任务执行优先级有关


非常感谢您的帮助

如果您认为异步liquibase是原因,您是否尝试过禁用它,如LiquibaseConfiguration.java中所述?是的,我当前正在同步运行它,并且在生成时没有收到错误,但它不会同时创建两个帐户。我只有一个管理员帐户“USERLIMITED”,它是一个管理员,而liquibase帐户不存在。我认为这是一个事件顺序问题,即使是同步加载,但我可能在这里的设置中遗漏了一些东西。您可以在jdbc URL中指定的初始化脚本中创建您的用户,请参见旁注,使用与prod和testcontainers中相同的数据库替换h2会更容易