将独立的spring应用程序转换或集成到Spring MVC应用程序。
我有一个具有以下结构的spring MVC应用程序
myApp
|- META-INF
|- WEB-INF
|-classes
|-com
|-controllers
|-service
|-lib
|-UserLibrary.jar
|-META-INF
|-applicationContext.xml
|-dbre.xml
|-ehcache.xml
|-DataSource.xml
|-Jpa.xml
|-SpringDataJpa.xml
|-applicationContext.xml
|-myApp-servlet.xml
按照通常的过程加载Spring MVC。即控制器注释为@Controllers
,服务注释为@Service
等。
userLibrary.jar
曾经是一个独立的spring应用程序,它有自己的Spring / JPA配置。它被转换,以便它可以集成到MVC应用程序中。它有自己的配置文件(总共约7个),它自己的Hibernate / JPA实体管理器等。
对于我在Spring MVC应用程序中使用它,我对服务类稍作修改,以便在WebApplicationContext完成初始化时加载UserLibrary应用程序的应用程序上下文。
public class MyAppService implements
ApplicationListener<ContextRefreshedEvent> {
protected UserLibraryService service;
--
-- several service methods etc
--
System.getProperty("username", "userA");
System.getProperty("password", "userB");
@Override
public void onApplicationEvent(ContextRefreshedEvent arg0) {
ApplicationContext context =
new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
service = context.getBean(UserLibrary.class);
}
}
上述方法产生两个容器,即MVC应用程序的WebApplicationContext
和UserLibrary应用程序的ApplicationContext
。
我怀疑以上不是正确/最好的方法,所以我正在寻求什么是最好的方法的建议。例如,我可以使用单个容器而不是两个容器吗?
这是我尝试过的。我从MVC应用程序的UserLibrary
导入了applicationContext.xml
应用程序的配置文件。
<import resource="classpath:META-INF/applicationContext.xml" />
然后我在MVC应用程序的UserLibraryBean
文件中添加了applicationContext.xml
(包含import语句的同一文件。
<bean class="com.service.UserLibraryService"/>
几个问题:
UserLibraryService在初始化期间读取以下属性
System.getProperty( “用户名”); System.getProperty( “密码”);
在我的原始示例中,我在onApplicationEvent
方法中设置了上述值,UserLibray
可以读取它们。
这些似乎不再设置,因此我从UserLibrary
应用程序收到了尚未设置属性的错误。我也尝试在Service类的构造函数中设置它们,但它们仍未设置。
有没有办法在xml文件中将系统属性设置为bean定义的一部分?我在哪里可以设置属性,以便它们可用于服务对象?
由于
答案 0 :(得分:2)
您可以在Web应用程序的web.xml中的context-param / contextConfigLocation参数中指定多个配置xml文件
您可以使用文件名上的classpath:
前缀从类路径
答案 1 :(得分:1)
您可以阅读多个配置文件,例如 -
ApplicationContext context =
new ClassPathXmlApplicationContext(new String[] {"META-INF/userLibrary.xml",
"META-INF/transaction.xml"});
您也可以使用 -
<import resource="META-INF/userLibrary.xml"/>