Unitils:如何从Spring获取数据库属性
我使用 Unitils 和 Spring 进行单元测试。我已经使用属性文件为 Spring 配置了数据源。
我的问题是如何为 Unitils 使用相同的数据源或相同的属性?
Unitils 需要类路径中的unitils.properties 文件包含数据库配置参数,如url、用户、密码和驱动程序。
我尝试使用 Spring 配置中使用的属性来配置 Unitils,如下所示,但它不起作用。
database.driverClassName=${jdbc.driver.class}
谢谢, 阿迪
I am using Unitils with Spring for unit testing. I've configured Spring with datasource using a properties file.
My question is how can I use the same datasource or the same properties for Unitils?
Unitils expects a file in the classpath unitils.properties with database configuration parameters like url, user, password and driver.
I've tried to configure Unitils using the properties used in the Spring configuration as below but it is not working.
database.driverClassName=${jdbc.driver.class}
Thanks,
Adi
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
一个潜在的解决方案...您可以让 Spring 配置从 unitils.properties 读取其数据源参数,而不是相反。可能不太理想。
我相信unitils正在幕后使用spring,因此您也可以尝试使用
@SpringApplicationContext
在unitils测试中添加数据源上下文。如果您可以在启动时找出由unitils设置的数据源bean的名称,您可以在您的上下文中覆盖它(假设unitils数据源bean是在其他spring bean之前创建的,这可能是/可能不是真的。)例如
@SpringApplicationContext({" CorrectDataSourceContext.xml"})
编辑:另一个肯定有效的选项:https://stackoverflow.com/a/6561782/411229
基本上是自己实例化 Unitils 并手动设置属性。
One potential solution... You could have your Spring configuration read its datasource parameters from the unitils.properties, instead of the other way around. Probably not ideal.
I believe unitils is using spring under the covers, so you might also try adding your datasource context in your unitils tests by using
@SpringApplicationContext
. If you could figure out the name of the datasource bean setup by unitils when it starts up, you could override it in your context (assuming the unitils datasource bean is created before the other spring beans are which may/may not be true.)e.g.
@SpringApplicationContext({"correctDataSourceContext.xml"})
EDIT: Another option that will definitely work: https://stackoverflow.com/a/6561782/411229
Basically instantiate Unitils yourself and set the properties manually.
瑞安的回答是正确的,也很有帮助,尽管我使用了不同的方法。
我扩展了类
PropertiesDataSourceFactory
来重写方法,如下所示:还编写了一个 SystemPropertiesReader 作为:
并添加了一个带有属性文件的 bean:
将以下内容添加到unitils.properties:
Ryan answer is correct and helpful as well though I've used different approach.
I extended the class
PropertiesDataSourceFactory
ro override the methods as follows:and also wrote a SystemPropertiesReader as:
and added a bean with the properties file:
add the following to unitils.properties:
只是想添加一些想法,我不确定这是否是最佳实践,或者如果有问题请不要纠正我。
-src
--测试包
---BaseServiceTest.class
---BlogspotServiceTest.class
--hibernate.cfg.xml
-网络
--WEB-INF
---blogspot-servlet-test.xml
---jdbc-test.properties
在我的例子中,我使用我的 blogspot-servlet-test.xml 来调用或创建数据源
我的 jdbc-test.properties 文件
对于 hibernate.cfg.xml
并为我创建了 BaseClass为了减少创建多个@SpringApplicationContext注释,它也用于配置测试其他类所需的公共配置,只需扩展它即可。
我使用 @SpringApplicationContext 在我的 BaseClass 上加载数据源和其他 bean 配置,这就是我实现它的方式。
下面:参见 Spring-Unitils 教程
有关更多详细信息
注意:请在 TestPackage 中创建unitils.properties 和unitils-local.properties 以便能够运行该程序。
对于@SpringBean解释和其他注释,请阅读:
Unitils-EasyMock
Just want to add some idea and im not sure if it is a best practice or not so correct me if theres something wrong.
-src
--TestPackage
---BaseServiceTest.class
---BlogspotServiceTest.class
--hibernate.cfg.xml
-web
--WEB-INF
---blogspot-servlet-test.xml
---jdbc-test.properties
in my case I used my blogspot-servlet-test.xml to call or to create the datasource
MY jdbc-test.properties file
For hibernate.cfg.xml
and i created BaseClass for me to lessen creating of multiple @SpringApplicationContext annotation and it is also use to configure common configuration needed in testing other class, just extends it.
i used @SpringApplicationContext to load the datasource and other bean configurations on my BaseClass and this is how i implement it.
Below : see Spring-Unitils Tutorial
for more details
NOTE: please create unitils.properties and unitils-local.properties inside TestPackage to be able to run the program.
For @SpringBean explanation and other annotation please read :
Unitils-EasyMock