问题:
我在软件中包含3个部分:
我想从A和B连接到C
我用以下设置编写了一个库:
我的客户A和B都有自己的来源和属性:
连接器的属性包含该服务的一些登录信息,例如
target.url=https://....
target.usr=blablabla
target.key=mySHAkey
在TargetConfig中用于预配置连接器,例如
@Value("target.url")
String url;
@Value("target.usr")
String usr;
@Value("target.key")
String key;
@Bean
public TargetConnector connector() {
return new TargetConnector(url, usr, key);
}
现在,当我在客户端中使用连接器jar时,可以通过packagescan找到配置。连接器类已加载,但问题是它没有加载属性文件。
研究
我发现多个属性文件不能具有相同的名称(例如,客户端application- {profile} .properties与连接器中的名称冲突),因此我尝试重命名 application- {profile} .properties 到 application-connector- {profile} .properties 。
不管谁仍然不被加载的属性(这很有意义,因为我没有例如 connector-dev 配置文件,但是我的配置文件仅被命名为 dev )。
此外,即使我尝试使用以下方法从连接器显式加载属性文件之一:
@PropertySource({"classpath*:application-connector-dev.properties"})
找不到
问题
我的问题实际上是3层:
如果需要进一步的解释,请询问。
答案
我接受了公认答案中给出的方法。 我刚刚为dev,tst,prd配置文件创建了3个包含所需值的配置文件,并用正确的配置文件注释了配置文件。
答案 0 :(得分:1)
您正在使用@Configuration带注释的类。也许每个配置文件可以有一个。这是一个例子:
@Configuration
@Profile("profileA")
@PropertySource({"classpath:application-profileA.properties"})
public class ConfigurationProfileA{
@Value("${target.url}")
String url;
@Value("${target.usr}")
String usr;
@Value("${target.key}")
String key;
@Bean
public TargetConnector connector() {
return new TargetConnector(url, usr, key);
}
}
对配置文件B进行相同的操作(也许您可以更好地进行结构化,但是这里的关键点是注释@Profile(“”)和@PropertySource(“”))
一旦有了config类,Spring将通过填充-spring.profiles.active = profileA(或您在@Profile(“”)批注中编写的配置文件的名称)来使用所需的Configuration类。< / p>
答案 1 :(得分:1)
I think there is a typo in this line @PropertySource({"classpath*:application-connector-dev.properties"}) Please check by removing the asterik.
答案 2 :(得分:0)
要使用特定的配置文件运行,例如,可以使用选项:q!
运行
如果不使用配置文件,它将在您似乎没有的-spring.profiles.active=dev
中加载默认配置文件。
此外,建议您始终拥有一个application.properties并将通用属性和您将在其他属性文件中覆盖的默认值放入其中。
另一个错误是如何使用application.properties
批注分配属性,您需要使用@Value