我使用SpringBoot,有两个非常相似的服务,我想在应用程序中配置它们。yml
。
配置大致如下所示:
serviceA.url=abc.com
serviceA.port=80
serviceB.url=def.com
serviceB.port=8080
是否可以创建一个带有@ConfigurationProperties
注释的类,并在注入点设置前缀?
例如。
@Component
@ConfigurationProperties
public class ServiceProperties {
private String url;
private String port;
// Getters & Setters
}
然后在服务本身:
public class ServiceA {
@Autowired
@SomeFancyAnnotationToSetPrefix(prefix="serviceA")
private ServiceProperties serviceAProperties;
// ....
}
不幸的是,我还没有在留档中找到关于这样一个功能的东西...非常感谢您的帮助!
除了JavaBean验证之外,Javvanos示例工作得很好。
我在其中一个属性上有一个注释@NotNull:
public class ServiceProperties {
@NotNull
private String url;
private String port;
// Getters & Setters
}
结果,应用程序启动失败,出现以下错误消息:
***************************
APPLICATION FAILED TO START
***************************
Description:
Binding to target ch.sbb.hop.commons.infrastructure.hadoop.spark.SparkJobDeployerConfig@730d2164 failed:
Property: url
Value: null
Reason: may not be null
Action:
Update your application's configuration
删除注释后,应用程序将使用正确的属性绑定启动。总之,我认为JavaBean验证无法获得正确初始化的实例存在问题,可能是因为配置方法上缺少代理。
遵循本Spring Boot中@ConfigurationProperties的发布指南,您可以创建一个没有注释的简单类:
public class ServiceProperties {
private String url;
private String port;
// Getters & Setters
}
然后使用@Bean注释创建@Configuration类:
@Configuration
@PropertySource("classpath:name_properties_file.properties")
public class ConfigProperties {
@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties serviceA() {
return new ServiceProperties ();
}
@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties serviceB(){
return new ServiceProperties ();
}
}
最后,您可以获得如下属性:
@SpringBootApplication
public class Application implements CommandLineRunner {
@Autowired
private ConfigProperties configProperties ;
private void watheverMethod() {
// For ServiceA properties
System.out.println(configProperties.serviceA().getUrl());
// For ServiceB properties
System.out.println(configProperties.serviceB().getPort());
}
}
我取得了和你尝试的几乎相同的成就。首先,注册每个属性bean。
@Bean
@ConfigurationProperties(prefix = "serviceA")
public ServiceProperties serviceAProperties() {
return new ServiceProperties ();
}
@Bean
@ConfigurationProperties(prefix = "serviceB")
public ServiceProperties serviceBProperties() {
return new ServiceProperties ();
}
在服务(或将使用属性的某个地方)放置一个@Qualifier并指定哪个属性将自动连接。
public class ServiceA {
@Autowired
@Qualifier("serviceAProperties")
private ServiceProperties serviceAProperties;
}
问题内容: 例如我有静态字段的类: 我可以使用两个不同的类加载器两次加载该类。我该如何避免呢?这是不安全和危险的。 另外,如果我将instance设置为null,那么是否将两个类的instance都设置为null? 问题答案: 如果你希望跨类加载器为true ,则需要一个公共父类来加载所讨论的类,或者你需要自己指定类加载器。 更新:来自@Pshemo的评论下面的博客中相当一部分内容可能直接来自Ja
另外,如果我将instance设置为null,那么这两个类是否都设置为null?
我创建了一个具有@ConfigurationProperties(Prefix='common.kafka')的配置类的配置类
我正在使用java。util。ServiceLoader创建轻量级插件框架。 我目前正在努力解决如何拥有多个具有相同FQN的实现类。我想在类路径上拥有同一个插件的两个副本,并且可以访问META-INF/services目录中给出的两个实现类。 以下是一些简单的eclipse项目,它们说明了我的意思:https://docs.google.com/open?id=0B4MxFm-ACB3IUmswN
我想知道如何转换类似于SwitchMap的可观察,但不是限制为单个活动流有多个(有限的)流。 其目的是让多个任务同时工作,达到某些任务计数限制,并允许新任务使用FIFO队列策略启动,这意味着任何新任务到达时都将立即启动,队列中最旧的任务将被取消。 switchMap将为源的每个发射创建可观察流,并将取消以前运行的可观察流。一旦创建了新的可观察流,我想实现类似的功能,但允许在某个级别(如flatMa
我的目标: <代码>http://host:port/myApp/about返回一个名为about的jsp页面。jsp 我的web.xml: 我的servlet.xml(使用Spring 3.0.3. RELEASE): 我的控制器: 在服务器(jetty 6,servlet api 2.5)启动时,我看到: 上述目标的设置结果: > 产生错误: 我检查/尝试过的事情: > 确实存在 我已经在这两