我的应用程序有存储在applicaion.yml文件中的嵌套属性。
我希望在应用程序启动时将这些属性映射到POJO。
application.yml:
demo:
- A:
- type: A
prop1: 1
prop2: 2
proop3: 3
- type: B
prop1: 1
prop2: 2
proop3: 3
- B:
- type: A
prop1: 1
prop2: 2
proop3: 3
- type: B
prop1: 1
prop2: 2
proop3: 3
为了实现这一点,我使用了以下注释:
@configuration
@enableConfigurationProperties
@configurationProperties(“demo”)
类演示:
@Configuration
@EnableConfigurationProperties
@ConfigurationProperties("demo")
public class Demo {
@JsonProperty("A")
private List<A> a = null;
@JsonProperty("B")
private List<B> b = null;
@JsonProperty("A")
public List<A> getA() {
return a;
}
@JsonProperty("A")
public void setA(List<A> a) {
this.a = a;
}
@JsonProperty("B")
public List<B> getB() {
return b;
}
@JsonProperty("B")
public void setB(List<B> b) {
this.b = b;
}
@Override
public String toString() {
return "Demo [a=" + a + ", b=" + b + "]";
}
}
public class A {
@JsonProperty("type")
private String type;
@JsonProperty("prop1")
private Integer prop1;
@JsonProperty("prop2")
private Integer prop2;
@JsonProperty("proop3")
private Integer proop3;
@JsonProperty("type")
public String getType() {
return type;
}
@JsonProperty("type")
public void setType(String type) {
this.type = type;
}
@JsonProperty("prop1")
public Integer getProp1() {
return prop1;
}
@JsonProperty("prop1")
public void setProp1(Integer prop1) {
this.prop1 = prop1;
}
@JsonProperty("prop2")
public Integer getProp2() {
return prop2;
}
@JsonProperty("prop2")
public void setProp2(Integer prop2) {
this.prop2 = prop2;
}
@JsonProperty("proop3")
public Integer getProop3() {
return proop3;
}
@JsonProperty("proop3")
public void setProop3(Integer proop3) {
this.proop3 = proop3;
}
@Override
public String toString() {
return "A [type=" + type + ", prop1=" + prop1 + ", prop2=" + prop2 + ", proop3=" + proop3 + "]";
}
}
public class B {
@JsonProperty("type")
private String type;
@JsonProperty("prop1")
private Integer prop1;
@JsonProperty("prop2")
private Integer prop2;
@JsonProperty("proop3")
private Integer proop3;
@JsonProperty("type")
public String getType() {
return type;
}
@JsonProperty("type")
public void setType(String type) {
this.type = type;
}
@JsonProperty("prop1")
public Integer getProp1() {
return prop1;
}
@JsonProperty("prop1")
public void setProp1(Integer prop1) {
this.prop1 = prop1;
}
@JsonProperty("prop2")
public Integer getProp2() {
return prop2;
}
@JsonProperty("prop2")
public void setProp2(Integer prop2) {
this.prop2 = prop2;
}
@JsonProperty("proop3")
public Integer getProop3() {
return proop3;
}
@JsonProperty("proop3")
public void setProop3(Integer proop3) {
this.proop3 = proop3;
}
@Override
public String toString() {
return "B [type=" + type + ", prop1=" + prop1 + ", prop2=" + prop2 + ", proop3=" + proop3 + "]";
}
}
主类
@SpringBootApplication
@ComponentScan(basePackages = {"com.microservice.*"})
@EnableJpaRepositories("com.microservice.*")
@EntityScan("com.microservice.*")
public class MainApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(MainApplication.class);
app.run();
System.out.println("step 1");
Demo config = new Demo();
System.out.println("name: " + config);
}
public void run(String... args) throws Exception {
System.out.println("step 2");
}
}
但是我在O/P下面:
步骤1
名称:Demo[a=null,b=null]
当您手动创建属性POJO的实例时,Spring并不知道它,并且不会进行属性绑定。
SpringApplication app = new SpringApplication(MainApplication.class);
app.run();
System.out.println("step 1");
Demo config = new Demo(); // Not a Spring managed bean!
System.out.println("name: " + config);
}
与使用@enableConfigurationProperties
注释配置不同,您可以将demo
设置为bean,如类型安全配置属性中所示。
@Component
@ConfigurationProperties("demo")
public class Demo {
...
}
然后您可以从上下文中获得demo
bean:
@SpringBootApplication
public class MainApplication {
public static void main(String[] args) {
ConfigurableApplicationContext context = SpringApplication.run(MainApplication.class, args);
Demo demo = (Demo) context.getBean("demo");
System.out.println(demo.getName());
}
}
demo:
a:
- type: A
prop1: 1
prop2: 2
proop3: 3
- type: B
prop1: 1
prop2: 2
proop3: 3
b:
- type: B
prop1: 1
prop2: 2
proop3: 3
@SpringBootApplication
public class MainApplication {
@Bean
public ObjectMapper objectMapper() {
return new ObjectMapper();
}
public static void main(String[] args) throws JsonProcessingException {
...
ObjectMapper objectMapper = (ObjectMapper) context.getBean("objectMapper");
System.out.println(objectMapper.writeValueAsString(demo));
}
}
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>2.0.1</version>
</dependency>
我有一个camel应用程序,它使用SSH私钥连接到SFTP服务器。如果我从文件中读取id_rsa文件,我就能够连接到服务器。如本例所示,它正在从文件加载。 我想在运行时动态地提供私钥。这意味着在应用中。spring boot应用程序中的yaml,将由docker容器环境变量替换。 我得到了这个例外 经过一些调试,我明白这是的问题。如果我从文件中读取,则私钥包含\n个字符。但是如果我从. yaml文
我正在读取google appengine应用程序中文件夹(/war/config/client.properties)中的属性文件。它在我的本地服务器上运行良好,但在生产模式下不工作,并且抛出异常java。安全AccessControlException:拒绝访问(java.io.FilePermission)。 你能告诉我如何在生产模式下工作吗。
在启动我的spring boot应用程序时,我希望使用命令行参数设置自定义配置文件路径,例如: 那么如何读取这个文件来生成spring配置呢?我可以以某种“动态”方式使用注释吗?
问题内容: 我对spring / java相当陌生,并且一直在为我正在工作的项目检查spring- boot。我一直在遵循指南,最后有一个(半)运行中的Web应用程序MVC + JPA用于数据访问。当我通过Jar方法部署应用程序时,一切正常: 但是,我们的应用程序最终将部署到Tomcat(v7.0.40),因此我需要从项目中创建一个war文件。我已经在spring.io网站上遵循了将jars转换为
src/main/resources/application.properti 为了完整起见,这里是build.gradle: 我构建应用程序:
我们有两个配置文件:一个在Spring Boot应用程序(application.properties)中,另一个在ReactJs应用程序(我们在create-react-app中使用.env)中。决定在ReactJs应用程序中也使用Spring Boot application.properties。有谁能指导我如何才能做到这一点吗?我读过关于“Properties-Reader”的文章,并尝试