在Spring Boot中,文档似乎鼓励在应用程序启动时运行迁移。
这很好,但有时应用程序启动可能会有副作用/依赖性,我不想麻烦-我只想自己运行迁移。设想一下,只需建立一个本地开发人员数据库,就可以在其中闲逛,甚至不用运行应用程序。
相比之下,在Dropwanner中,单独运行迁移对于应用程序的内置参数来说很简单,就像这样
java -jar hello-world.jar db migrate helloworld.yml
Spring靴有什么等价物吗?还是我必须直接去喝liquibase?
我对一个直接的答案感兴趣,但也有点感兴趣,看看我是否误解了更高层次的东西——比如也许这种在启动时运行的方法通常“更好”,因为一些我还没有发现的原因,所以你只被鼓励这样做以Spring Boot作为设计选择。
您可以使用不同的Spring配置文件:例如,使用名为“init”的配置文件,这将激活“liquibase”配置文件。
application.yml:(默认禁用Liquibase)
spring:
liquibase:
enabled: false
application-init.yml:(不运行web容器,所以Spring会在启动后自动关闭)
spring:
profiles:
include: liquibase
main:
web-application-type: none
spring-liquibase.yml:(启用liquibase)
spring:
liquibase:
enabled: true
change-log: classpath:/db/changelog/changelog.xml
此设置允许您将Liquibase作为init容器运行(spring.profiles.active=init),但如果您愿意,您仍然可以将Liquibase作为web应用的一部分运行(spring.profiles.active=Liquibase)。
这个答案提到了一个追着液化的钩子。在这个问题中,它被用来填充数据库,可能是测试值或默认值。
@Bean
@DependsOn("liquibase")
public YourBean yourBean() {
return new YourBean();
}
static class YourBean {
@PostConstruct
public void shutdown() {
// Exit your application here.
);
}
}
这可能管用。我不知道,你可能甚至可以访问liquibase模式,只有在“创建”时才会关闭
我知道这是一个老问题,但万一别人偶然发现它,这可能是有用的。
你可以为你的应用程序定义一个命令行参数,你将使用它来启动将运行迁移的应用程序上下文的一部分。
以下是科特林的一个例子:
import org.springframework.boot.autoconfigure.SpringBootApplication
import org.springframework.boot.autoconfigure.jdbc.DataSourceAutoConfiguration
import org.springframework.boot.autoconfigure.liquibase.LiquibaseAutoConfiguration
import org.springframework.boot.builder.SpringApplicationBuilder
import org.springframework.boot.runApplication
import org.springframework.context.annotation.AnnotationConfigApplicationContext
import org.springframework.context.annotation.Import
@SpringBootApplication
class Application
@Import(DataSourceAutoConfiguration::class, LiquibaseAutoConfiguration::class)
class LiquibaseInit
fun main(args: Array<String>) {
if (args.contains("dbinit")) {
SpringApplicationBuilder(LiquibaseInit::class.java)
.contextClass(AnnotationConfigApplicationContext::class.java)
.run(*args)
return
}
runApplication<Application>(*args)
}
我们在这里声明了2个类:Application
(主应用类具有@SpringBootApplication
注释)和LiquiBaseInit
(具有@DataSourceAutoConfigura
和@Liquibase AutoConfigura
),第一个将旋转整个上下文,而后者只会旋转Liquibase运行迁移所需的bean。
在main函数中,我们检查arguments数组是否有字符串dbinit
,如果有,我们从LiquiBaseInit
类中启动一个应用程序上下文。
现在,您可以像这样使用jar文件运行迁移:
java -jar hello-world.jar dbinit
如果你打算在Kubernetes中运行你的应用程序,你可能还想在我的博客中查看这篇文章:https://blog.monosoul.dev/2021/12/26/using-liquibase-with-kubernetes/ .
我在我的项目中使用带有MongoDb和Elasticsearch的Springboot。当我的Elasticsearch服务器运行时,我的Springboot应用程序运行良好,但当Elasticsearch服务器停止时,我的Springboot应用程序也无法启动。根据我的项目要求,即使Elasticsearch服务器无法启动,我们的Springboot应用程序仍应运行,因为我们的大多数API都是基
我正试图将运行在tomcat上的现有应用程序更改为SpringBoot。它一直运行到真正的SpringBoot启动。我有一个类似的应用程序运行在SpringBoot上。这就是我知道它一直运行到Springboot的原因。 我的主要方法: 我尝试使用@componentscan运行main方法,该方法具有如下所示的basePackages: 这无济于事。我尝试在main类的顶部添加@SpringBo
问题内容: 我用的是需要挂钩的BabelJS(原名6to5)与运行节点的应用程序es6features: 我打电话来运行我的 app.js6 。我需要安装BabelJS并为我想使用es6features的每个项目提供一个 run.js。 我希望打个电话。如何独立实现该系统(Unix和Windows)? 问题答案: 将and (又名ES6)依赖项添加到应用程序的package.json文件中,并定义
我正在开发一个spring启动应用程序并编写一些junit测试。 但我发现,当我运行任何测试时,tomcat也会启动,这使得这些测试非常缓慢,浪费了很多时间。 当我开发一个SpringMvc应用程序时,junit测试可以在不启动tomcat的情况下运行,这节省了很多时间。 所以,我想问它在那里无论如何要运行启动tomcat的springstart测试?
我有一个带有maven的spring boot应用程序,并使用Hikari数据源连接Mysql数据库。但当我运行spring boot应用程序时,HikariPool关机启动如下: 我将属性文件配置如下,并且可以通过正常使用单元测试来获得数据查询: 任何人都可以为我提供解决此问题的解决方案。谢谢
问题内容: 我是Node的新手,并创建了一个其中包含一些async / await语法的应用程序,如下所示: 它在我的机器上可以正常工作,但是当我部署到Heroku时,由于不支持语法而出现错误: 使Heroku支持此语法的最简单方法是什么? 问题答案: 指定要在package.json中使用的节点版本:https : //devcenter.heroku.com/articles/nodejs-s