Как я могу установить профили с пружинной загрузкой и Maven? - PullRequest
0 голосов
/ 24 августа 2018

У меня есть 2 среды для настройки моего API, поэтому у меня есть production и devПрежде всего, мне нужно было найти способ сделать это автоматически, например, во время выполнения без отправки какого-либо параметра (-D) приложение нашло способ определить, кто это, но я не нашел способа сделать это.таким образом.

Итак, я прочитал учебник, там же есть способ поместить переменную окружения и определить мои application.properties.Поэтому в следующих шагах:

  1. Я определяю 3 файла в своем приложении: application.properties, application-dev.properties и application-prod.properties.

  2. Внутри application.properties у меня есть конфигурация spring.profiles.active = $ {MYENV: local}.

  3. Внутри application-dev.properties у меня есть spring.profiles.active = dev.

  4. Внутри application-prod.properties у меня есть spring.profiles.active = prod.

  5. Я знаю, если япередать команду mvn spring-boot: run -Dspring-boot.run.profiles = (PROFILE) Spring выбрать профиль идеально.

У меня два вопроса:

  1. Моя переменная окружения корректно работает в Windows, поэтому, когда я запускаю свое приложение, пружина не заполняет переменную в $ {MYENV: local}, мне нужно больше конфигурировать?

  2. Я начинаю работать с микросервисами, поэтому, если у меня есть несколько микросервисов, этоСпособ установки переменных среды будет трудно поддерживать.Есть ли способ проще настроить профили без отправки командной строки?

Ответы [ 3 ]

0 голосов
/ 24 августа 2018

Есть несколько способов сделать это.Что лично я нахожу наиболее простым, так это:

Шаг 1: В дополнение к вашему application.properties файлу создайте еще property файлов (по одному для каждого профиля).Например - application-test.properties и application-prod.properties.Теперь у вас есть три файла свойств в папке resource.

Шаг 2: В вашем файле application.properties укажите текущий профиль в spring.profiles.active.Например - spring.profiles.active=test активирует тестовый профиль.

Шаг 3: Определите специфичные для профиля bean-компоненты.

@Bean
@Profile("test")
public CommandLineRunner commandLineRunner(ApplicationContext ctx) {
    return args -> {
        System.out.println("Let's inspect the beans provided by Spring Boot:");
        String[] beanNames = ctx.getBeanDefinitionNames();
        Arrays.sort(beanNames);
        for (String beanName : beanNames)
            System.out.println(beanName);
    };
}

Это создаст bean-компонент, если один из активных профилей равен test.

0 голосов
/ 24 августа 2018

Следующими различными способами вы можете установить профили:

1) Использование application.properties:

spring.profiles.active=dev

2) Использование аннотации @Profile:

@Configuration
@Profile({ "profile1", "profile2" })
public class Test {

  @Bean
  public Employee employee() {
    ...
  }
}

3) Использование Maven:

<profile>
        <id>production</id>
        <activation>
            <activeByDefault>true</activeByDefault>
        </activation>
        <properties>
            <activeProfile>production</activeProfile>
        </properties>
    </profile>

4) Используя vmargument, мы можем сделать это, как показано ниже:

mvn spring-boot:run -Drun.jvmArguments="-Dspring.profiles.active=production"

5) Использование System.setProperty ():

System.setProperty("spring.profiles.active", "dev");

6) Путем реализации WebApplicationInitializer

@Configuration
public class MyWebApplicationInitializer implements WebApplicationInitializer {

    @Override
    public void onStartup(ServletContext servletContext) throws ServletException {
        servletContext.setInitParameter("spring.profiles.active", "dev");
    }
}

7) Использование web.xml:

<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/app-config.xml</param-value>
</context-param>
<context-param>
    <param-name>spring.profiles.active</param-name>
    <param-value>dev</param-value>
</context-param>
0 голосов
/ 24 августа 2018

Вам нужно передать переменную -Dspring.profiles.active=dev в виртуальную машину во время запуска приложения.

https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-profiles.html

Не помещайте эту переменную в файл application-${env}.properties.Все дело в том, что Spring разрешает правильную конфигурацию при запуске приложения на основе spring.profiles.active.Так что в вашем случае вам не нужен файл application.properties.Вы можете просто удалить это.Оставьте свой dev и prod config и укажите правильную переменную.Вы не устанавливаете его в своих системных переменных - вам нужно напрямую проинструктировать ваше приложение.Попробуйте:

java -jar myApplication.jar -Dspring.profiles.active=dev

Если вы хотите, чтобы ваш env был разрешен на основе системного свойства, вы можете попробовать:

java -jar myApplication.jar -Dspring.profiles.active=%MYENV%

Если вы хотитечтобы узнать, какое приложение env запущено, вы можете попробовать:

@Value("${spring.profiles.active}")
private String activeProfile;

Профили Maven разрешаются во время компиляции.Это два разных мира.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...