我正在一个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文件中存在的值填充变量键?
答案 0 :(得分:1)
@Value Spring批注
此注释可用于将值注入到Spring管理的bean中的字段中
因此在某个配置类中将AuthAdapter
设置为spring bean
@Configuration
public class ApplicationConfig {
@Bean
public AuthAdapter getAuthAdapter() {
return new AuthAdapter():
}
}
在application.yml
或application.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没有注入它。 这可能来自以下几种原因:
application.properties中没有属性“ signin.key”
SpringBoot无法启动=>确保您的应用程序中有一个带有@springbootapplication的主注释
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中存在该