无需主应用程序即可从application.properties获取价值

时间:2019-03-25 16:12:14

标签: java spring-boot

我正在一个Spring Boot项目中,它包含几个使用嵌入式Tomcat启动的应用程序,以及一个仅用作运行应用程序库的独特应用程序。在该库应用程序中,我需要从application.properties文件中检索一个变量的值。作为库应用程序,它没有Main类,因此变量将始终为null。 我的尝试是这些:

 public class AuthAdapter implements IAuthAdapter {

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

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

当使用它的应用程序调用getSigninKey()时,变量键为null。 考虑到前面说明的情况,我该如何使用appliaction.properties文件中存在的值填充变量键?

4 个答案:

答案 0 :(得分:1)

@Value Spring批注

  

此注释可用于将值注入到Spring管理的bean中的字段中

因此在某个配置类中将AuthAdapter设置为spring bean

@Configuration
public class ApplicationConfig {

 @Bean
 public AuthAdapter getAuthAdapter() {

  return new AuthAdapter():
  }
}

application.ymlapplication.properties中具有属性

application.yml

signin:
  key: value

或者如果AuthAdapter用任何构造型注释here进行注释,只需在ComponentScan中启用该类

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

    public static void main(String[] args) {

        SpringApplication.run(Main.class);

     }
}

答案 1 :(得分:0)

您需要根据需要用@ Service / @ Component / @ Repository / @ Configuration注释AuthAdapter类。这样,Spring Boot将在spring上下文初始化期间将application.properties注入到您的类中。

答案 2 :(得分:0)

如果变量key == null,则意味着Spring没有注入它。 这可能来自以下几种原因:

  1. application.properties中没有属性“ signin.key”

  2. SpringBoot无法启动=>确保您的应用程序中有一个带有@springbootapplication的主注释

  3. Spring不能实例化AuthAdapter:

=> AuthAdapter不应像以下实例那样:

authAdapter = new AuthAdapter();

相反,它必须由Spring自己实例化并注入,例如:

@Autowired
private authAdapter AuthAdapter;

为此,必须使用springBoot注释对AuthAdapter进行注释: @Service/@Component/@Repository/@Configuration

最后,包含AuthAdapter类的软件包必须在组件扫描范围内才能告诉Spring实例化。

答案 3 :(得分:0)

确保application.properties中存在“ signin.key”并且生成的jar中存在该