Получить значение из application.properties без основного приложения - PullRequest
1 голос
/ 25 марта 2019

Я работаю в проекте Spring Boot, состоящем из нескольких приложений, загружаемых со встроенным Tomcat, и уникального приложения, используемого только в качестве библиотеки для запуска приложений. В этом библиотечном приложении мне нужно получить значение из файла application.properties для переменной. Будучи приложением библиотеки, он не имеет класса Main, поэтому переменная всегда будет нулевой. Моя попытка была такой:

 public class AuthAdapter implements IAuthAdapter {

    @Value("${signin.key}")
    private String key;

    @Override
    public String getSigningKey() {
        return key;
    }
}

Когда getSigninKey () вызывается приложением, которое его использует, переменная key имеет значение null. Как я могу заполнить ключ переменной значением, присутствующим в файле appliaction.properties, с учетом ситуации, описанной ранее?

Ответы [ 4 ]

1 голос
/ 25 марта 2019

@ Значение Spring аннотация

Эта аннотация может использоваться для ввода значений в поля в бинах, управляемых Spring

Так что сделайте AuthAdapter как пружинный компонент в некотором классе конфигурации

@Configuration
public class ApplicationConfig {

 @Bean
 public AuthAdapter getAuthAdapter() {

  return new AuthAdapter():
  }
}

со свойством в application.yml или application.properties

application.yml

signin:
  key: value

Или, если AuthAdapter помечен аннотациями стереотипа здесь , просто включите этот класс в ComponentScan

@SpringBootApplication
@ComponentScan({ "com.project1", "com.library.AuthAdapter" })
public class Main {

    public static void main(String[] args) {

        SpringApplication.run(Main.class);

     }
}
0 голосов
/ 25 марта 2019

Убедитесь, что «signin.key» присутствует в application.properties и присутствует в сгенерированном jar

0 голосов
/ 25 марта 2019

Если переменная key == null, это означает, что Spring ее не внедрил. Это может быть вызвано несколькими причинами:

  1. свойство "signin.key" отсутствует в приложении. Свойства

  2. SpringBoot не запускается => убедитесь, что в вашем приложении есть основной, помеченный @ springbootapplication

  3. AuthAdapter не запускается Spring:

=> AuthAdapter не должен быть похож на:

authAdapter = new AuthAdapter();

Вместо этого он должен быть запущен и внедрен самой Spring как:

@Autowired
private authAdapter AuthAdapter;

Для этого AuthAdapter должен иметь аннотацию springBoot: @Service/@Component/@Repository/@Configuration.

Наконец, пакет, содержащий класс AuthAdapter, должен находиться в периметре сканирования компонента, чтобы сообщить Spring о его создании.

0 голосов
/ 25 марта 2019

Вам необходимо аннотировать свой класс AuthAdapter с помощью @ Service / @ Component / @ Repository / @ Configuration в соответствии с вашими требованиями. Таким образом, Spring Boot будет вставлять application.properties в ваш класс во время инициализации контекста Spring.

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