如何在以2种模式初始化和服务器运行的spring启动应用程序中应用模式?

时间:2017-07-06 12:30:29

标签: hibernate spring-boot

我正在寻找一种模式,用于在2种初始化和服务器模式下开发我的春季启动网络。

我将从程序参数或yaml文件中获取参数。

如果此参数初始化程序在初始化模式下运行。初始化模式将执行一些设置,创建hibernate表,在该停止后将默认用户添加到db。是的,我会跑完并完成这项工作之后就会停止。

如果此参数是server,则程序通常运行s​​pring boot web application。

你知道我说的模式还是可以为我提供任何解决方案?

感谢。

1 个答案:

答案 0 :(得分:1)

<强> Spring Profiles

Spring配置文件提供了一种隔离应用程序配置部分并使其仅在特定环境中可用的方法。任何@Component或@Configuration都可以用@Profile标记,以限制何时加载:

在正常的Spring方式中,您可以使用spring.profiles.active Environment属性来指定哪些配置文件处于活动状态。您可以通过任何常用方式指定属性,例如,您可以将其包含在application.properties中:

spring.profiles.active=dev,hsqldb

或使用开关

在命令行中指定
--spring.profiles.active=dev,hsqldb.

您可以在应用程序运行之前通过调用 SpringApplication.setAdditionalProfiles(...)以编程方式设置活动配置文件。也可以使用Spring的ConfigurableEnvironment接口激活配置文件。

通过@ConfigurationProperties引用的application.properties(或application.yml)和文件的特定于配置文件的变体被视为已加载文件。有关详细信息,请参见第24.4节“Profile-specific properties”。

除了application.properties文件之外,还可以使用命名约定application- {profile} .properties定义特定于配置文件的属性。环境有一组默认配置文件(默认为[默认]),如果没有设置活动配置文件,则使用这些配置文件(即,如果没有显式激活配置文件,则加载application-default.properties中的属性)。

特定于配置文件的属性从与标准application.properties相同的位置加载,特定于配置文件的文件始终覆盖非特定文件,而不管特定于配置文件的文件是在打包的jar内部还是外部。

如果指定了多个配置文件,则应用最后获胜策略。例如,spring.profiles.active属性指定的配置文件是在通过SpringApplication API配置的配置文件之后添加的,因此优先。

以下是yml文件的示例。其中包含2个配置文件。

#Production Configuration values
spring:
  profiles: prod  

  datasource:
    url: jdbc:mysql://localhost:3306/production

    username: userName
    password: password
  main:
    banner-mode: "off"
  jpa:
    show-sql: false
---

#Development  Configuration values
spring:
  profiles: development

  datasource:
    url: jdbc:mysql://localhost:3306/development?useSSL=false
    username: userName
    password: password

... Other settings can be here like creating tables, configure liquibase or hibernate auto ddl to true.

要使用开发模式运行项目,可以运行以下

java -jar -Dspring.profiles.active=development springbootproject.jar