我是 SpringBoot 的新手,并尝试使用内置的 SpringBoot 注释从 YML 文件中读取属性。
以下是代码:
应用程序属性.java
@Component
@ConfigurationProperties(prefix = "patterns")
public class AppProperties {
private List<PasswordPattern> password_patterns = new ArrayList<>();
public static class PasswordPattern {
private String pattern1;
@Autowired
public String getPattern1() {
return pattern1;
}
public void setPattern1(String pattern1) {
this.pattern1 = pattern1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
调用 AppProperties 的测试类
测试1.java
public class Test1 {
public static void main(String[] args) throws JsonParseException, JsonMappingException, IOException {
// TODO Auto-generated method stub
AppProperties.PasswordPattern a = new AppProperties.PasswordPattern();
System.out.println(a.getPattern1());
}
}
Run Code Online (Sandbox Code Playgroud)
application.yml 文件
---
patterns:
password_patterns:
pattern1: "test"
Run Code Online (Sandbox Code Playgroud)
期望: getPattern1() 方法应该返回从 yml 文件读取的值
我参考了很多关于此类问题的帖子,但不明白我犯了什么错误。我错过了任何特定的注释吗?我很红
@Autowired
它与依赖注入有关,我也使用过......请建议
进一步编辑:
在关注“Alexander Pinkin”的帖子后,出现以下错误:
***************************
APPLICATION FAILED TO START
***************************
Description:
Failed to bind properties under 'patterns.password-patterns' to java.util.Map<ja
va.lang.String, java.lang.String>:
Reason: No converter found capable of converting from type [java.lang.String
] to type [java.util.Map<java.lang.String, java.lang.String>]
Action:
Update your application's configuration
Run Code Online (Sandbox Code Playgroud)
进一步编辑2:
应用程序属性.java
@Component
@ConfigurationProperties(prefix = "patterns")
public class AppProperties {
private List<Menu> menus = new ArrayList<>();
public static class Menu {
private String pattern1;
public String getPattern1() {
return pattern1;
}
public void setPattern1(String pattern1) {
this.pattern1 = pattern1;
}
}
}
Run Code Online (Sandbox Code Playgroud)
密码patApplication.java
@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class PasswordpatApplication {
private static final Logger LOG = LoggerFactory.getLogger(PasswordpatApplication.class);
@Autowired
public static void main(String[] args) {
SpringApplication.run(PasswordpatApplication.class, args);
AppProperties.Menu a = new AppProperties.Menu();
LOG.info("hi");
LOG.info(a.getPattern1());
}
Run Code Online (Sandbox Code Playgroud)
应用程序.yml
patterns:
password-patterns:
pattern1: test
Run Code Online (Sandbox Code Playgroud)
输出:
. ____ _ __ _ _
/\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \
( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \
\\/ ___)| |_)| | | | | || (_| | ) ) ) )
' |____| .__|_| |_|_| |_\__, | / / / /
=========|_|==============|___/=/_/_/_/
:: Spring Boot :: (v2.0.4.RELEASE)
2018-08-24 18:56:21.116 INFO 11712 --- [ main] c.e.passwordpat.Passwo
rdpatApplication : Starting PasswordpatApplication v0.0.1-SNAPSHOT on PUNITP13
0066L with PID 11712 (C:\Users\irfan.sayed\Downloads\passwordpat\target\password
pat-0.0.1-SNAPSHOT.jar started by irfan.sayed in C:\Users\irfan.sayed\Downloads\
passwordpat\target)
2018-08-24 18:56:21.131 INFO 11712 --- [ main] c.e.passwordpat.Passwo
rdpatApplication : No active profile set, falling back to default profiles: de
fault
2018-08-24 18:56:21.271 INFO 11712 --- [ main] s.c.a.AnnotationConfig
ApplicationContext : Refreshing org.springframework.context.annotation.Annotatio
nConfigApplicationContext@6c629d6e: startup date [Fri Aug 24 18:56:21 IST 2018];
root of context hierarchy
2018-08-24 18:56:22.066 WARN 11712 --- [ main] f.a.AutowiredAnnotatio
nBeanPostProcessor : Autowired annotation is not supported on static methods: pu
blic static void com.example.passwordpat.PasswordpatApplication.main(java.lang.S
tring[])
2018-08-24 18:56:23.887 INFO 11712 --- [ main] o.s.j.e.a.AnnotationMB
eanExporter : Registering beans for JMX exposure on startup
2018-08-24 18:56:23.920 INFO 11712 --- [ main] c.e.passwordpat.Passwo
rdpatApplication : Started PasswordpatApplication in 3.484 seconds (JVM runnin
g for 4.104)
2018-08-24 18:56:23.929 INFO 11712 --- [ main] c.e.passwordpat.Passwo
rdpatApplication : hi
2018-08-24 18:56:23.931 INFO 11712 --- [ main] c.e.passwordpat.Passwo
rdpatApplication : null
2018-08-24 18:56:23.938 INFO 11712 --- [ Thread-2] s.c.a.AnnotationConfig
ApplicationContext : Closing org.springframework.context.annotation.AnnotationCo
nfigApplicationContext@6c629d6e: startup date [Fri Aug 24 18:56:21 IST 2018]; ro
ot of context hierarchy
2018-08-24 18:56:23.946 INFO 11712 --- [ Thread-2] o.s.j.e.a.AnnotationMB
eanExporter : Unregistering JMX-exposed beans on shutdown
Run Code Online (Sandbox Code Playgroud)
现在,控制台上没有打印任何内容。没有任何错误或异常
请建议
您应该启动 Spring 上下文并将您的属性命名为“password-patterns”或“passwordPatterns”。
这应该有效:
应用程序属性.java:
@ConfigurationProperties(prefix = "patterns")
public class AppProperties {
private Map<String, String> passwordPatterns = new HashMap<>();
public Map<String, String> getPasswordPatterns() {
return passwordPatterns;
}
}
Run Code Online (Sandbox Code Playgroud)
演示应用程序.java
@SpringBootApplication
@EnableConfigurationProperties(AppProperties.class)
public class DemoApplication implements CommandLineRunner {
private static final Logger LOG = LoggerFactory
.getLogger(DemoApplication.class);
@Autowired
private AppProperties appProperties;
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
@Override
public void run(String... args) {
LOG.info("pattern = {}", appProperties.getPasswordPatterns().get("pattern1"));
}
}
Run Code Online (Sandbox Code Playgroud)
应用程序.yml
patterns:
password-patterns:
pattern1: "test"
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
15940 次 |
最近记录: |