весенняя загрузка: как динамически устанавливать свойства пружины - PullRequest
1 голос
/ 19 октября 2019

Существует так много свойств, которые могут быть определены в application.properties приложения весенней загрузки.

Но я хочу передать свойства для настройки ssl для Spring из кода.

server.ssl.enabled=true
# The format used for the keystore 
server.ssl.key-store-type=PKCS12
# The path to the keystore containing the certificate
server.ssl.key-store=keys/keystore.jks
# The password used to generate the certificate
server.ssl.key-store-password=changeit
# The alias mapped to the certificate
server.ssl.key-alias=tomcat

Так как это будут определенные пружиной свойства, которые будут использоваться из application.properties. Я просто хочу установить их из кода, основанного на некоторой логике.

Для не Spring-приложения у меня все еще есть идея, что они могут быть переданы как свойства приложения, сеанса или контекста, но я не знаю, как этоработает весной.

Любая помощь будет оценена.

Ответы [ 3 ]

1 голос
/ 19 октября 2019

Так как вы знаете свойства для включения SSL в приложении весенней загрузки. Вы можете передать эти свойства программно в приложении весенней загрузки следующим образом:

@SpringBootApplication
public class SpringBootTestApplication {
    public static void main(String[] args) {

//      SpringApplication.run(SpringBootTestApplication.class, args);

        Properties props = new Properties();
        props.put("server.ssl.key-store", "/home/ajit-soman/Desktop/test/keystore.p12");
        props.put("server.ssl.key-store-password", "123456");
        props.put("server.ssl.key-store-type", "PKCS12");
        props.put("server.ssl.key-alias", "tomcat");

        new SpringApplicationBuilder(SpringBootTestApplication.class)
            .properties(props).run(args);
    }
}

Как видите, я прокомментировал это: SpringApplication.run(SpringBootTestApplication.class, args); и использовал класс SpringApplicationBuilder для добавления свойств в приложение.

Теперь эти свойства определены в программе. Вы можете применять условия и изменять значения свойств в соответствии с вашими требованиями.

1 голос
/ 19 октября 2019

Вам необходимо определить и зарегистрировать ApplicationListener следующим образом:

public class DynamicPropertiesListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent> {
  public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
    ConfigurableEnvironment environment = event.getEnvironment();
    // modify the properties here, see the ConfigurableEnvironment javadoc
  }
}

Теперь зарегистрируйте слушателя. Если вы запустите приложение с помощью метода main:

SpringApplication app = new SpringApplication(primarySources);
app.addListeners(new DynamicPropertiesListener());
app.run(args);

или, что еще лучше, создайте файл src\main\resources\META-INF\spring.factories с таким содержимым:

org.springframework.context.ApplicationListener=x.y.DynamicPropertiesListener

Где x.y - этопакет вашего слушателя.

0 голосов
/ 19 октября 2019

В Spring Boot вы можете читать и редактировать свойства, используя System.getProperty(String key) и System.setProperty(String key, String value)

public static void main(String[] args) {

    // set properties
    System.setProperty("server.ssl.enabled", "true");
    System.setProperty("server.ssl.key-store-type", "PKCS12");
    System.setProperty("server.ssl.key-store", "keys/keystore.jks");
    System.setProperty("server.ssl.key-store-password", "changeit");
    System.setProperty("server.ssl.key-alias", "tomcat");

    // run
    SpringApplication.run(DemoApplication.class, args);
}

Примечание :

Это перезапишет статические свойства(не все, кроме перезаписанных).

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