java初始化配置_java – 配置Spring以在初始化bean之前设置系统属性

在Spring MVC Web应用程序中,我在配置文件中配置了一个bean:

在服务类中,bean被初始化,如下所示:

@Autowired

CallbackService service

上面显示的CallbackService通过进行以下三次调用来获取其连接属性(现在无法更改):

System.getProperty("user");

System.getProperty("password");

System.getProperty("connectionURL");

声明CallbackService实例的服务类可以通过读取属性文件来访问上述三个值,如下所示:

@Value("${user}")

protected String userName;

@Value("${password}")

protected String password;

@Value("${connection}")

protected String connectionString;

我需要设置Call​​backService的属性是设置系统属性(初始化后),如下所示:

System.setProperty("user", userName);

System.setProperty("password", password);

System.setProperty("connectionURL", connectionString);

然而,我遇到的问题是对象被初始化的顺序.这些属性正在初始化,但看起来在Spring从属性文件中准备好它们之前就发生了System.setProperty调用.

我已经尝试了几个解决方案,但似乎在从属性文件中读取值并调用System.setProperty的调用之前,实例化了CallbackService对象.

最终正在读取属性文件,因为我可以看到值,如果我从其中一个@Controller方法访问它们.问题是初始化属性并且实例化CallbackService实例的点.

经过几个小时的谷歌搜索,我尝试了以下解决方案,但没有似乎在CallbackService实例的初始化/实例化之前填充系统属性

>实现InitiazingBean并在其中设置系统属性

afterPropertiesSet()方法.

>实现ApplicationListener并在onApplicationEvent()方法中设置系统属性.

>为XML中的CallbackService bean定义设置lazy-init = true.

>按照此处所述设置系统属性Set System Property With Spring Configuration File

上面的第4点似乎是我想要的,但是当我将以下(我需要的三个属性)添加到我的上下文文件时,我没有看到任何差异.

class="org.springframework.beans.factory.config.MethodInvokingFactoryBean">

/super/secret/jaas.conf

如何确保在执行对​​System.setProperty的调用之前从属性文件中读取值,然后才能实例化CallbackService实例?

谢谢

解决方法:

您可以让CallbackService depend on另一个初始化系统属性的bean,例如

class SystemPropertiesInitializer {

SystemPropertiesInitializer(@Value("${user}") String userName,

@Value("${password}") String password,

@Value("${connection}" String connectionString) {

System.setProperty("user", userName);

System.setProperty("password", password);

System.setProperty("connectionURL", connectionString);

}

}

下一个,

或者,您可以使用@DependsOn注释:

@Component

@DependsOn("systemPropertiesInitializer")

class CallbackService {

// implementation omitted

}

标签:java,spring-mvc,spring,configuration,java-ee

来源: https://codeday.me/bug/20190625/1286561.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值