Java 无法配置RootConfig和RootWebMvcConfig
我正在尝试使用两个servlet配置Spring应用程序:Java 无法配置RootConfig和RootWebMvcConfig,java,spring,hibernate,spring-mvc,jpa,Java,Spring,Hibernate,Spring Mvc,Jpa,我正在尝试使用两个servlet配置Spring应用程序: 使用Spring的事务管理和 JPA 为REST端点提供服务的DispatcherServlet 需要相同的事务管理 我下面的当前配置与答案相匹配,但有一点例外。在RootWebMvcConfig中,我导入了RootConfig。我知道这是我在下面收到的错误消息的原因,但是我想了解如何配置它,以便我的web servlet和REST servlet都可以访问根配置。如果省略导入,则会收到异常,指示通过DispatcherServlet访
<context-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>my.package.RootConfig</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<servlet>
<servlet-name>mvc-dispatcher</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextClass</param-name>
<param-value>
org.springframework.web.context.support.AnnotationConfigWebApplicationContext
</param-value>
</init-param>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>my.package.RootWebMvcConfig</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>mvc-dispatcher</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
<servlet>
<servlet-name>anotherservlet</servlet-name>
<servlet-class>my.package.AnotherServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>anotherservlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
服务类别:
@Service
@Transactional(readOnly = true)
public class MyProjectProvider {
@Autowired
private EntityToRestPojoMapper mapper; // This is an Orika ConfigurableMapper
@Autowired
private MyObjectService service;
public List<MyObjectPojo> getMyObjects() {
List<MyObject> data = service.findData();
List<MyObjectPojo> dataPojos = new ArrayList<MyObjectPojo>();
mapper.mapAsCollection(data, dataPojos, MyObjectPojo.class);
return dataPojos;
}
}
@服务
@事务(只读=真)
公共类MyProjectProvider{
@自动连线
私有EntityToRestPojoMapper;//这是一个Orika ConfigurableMapper
@自动连线
私人MyObject服务;
公共列表getMyObjects(){
列表数据=service.findData();
List dataPojos=new ArrayList();
mapper.mapAsCollection(数据,dataPojos,MyObjectPojo.class);
返回dataPojos;
}
}
我不确定您是否需要从RootWebMvcConfig导入RootConfig。Upd oops解决了这个问题,我会将事务性服务移到根web应用上下文。另外请注意,由于Spring中的web应用上下文层次结构,servlet上下文将已经可以访问根web应用上下文中由RootConfig定义的bean。也许您应该在事务不可用的地方发布方法的代码。
@Service
@Transactional(readOnly = true)
public class MyProjectProvider {
@Autowired
private EntityToRestPojoMapper mapper; // This is an Orika ConfigurableMapper
@Autowired
private MyObjectService service;
public List<MyObjectPojo> getMyObjects() {
List<MyObject> data = service.findData();
List<MyObjectPojo> dataPojos = new ArrayList<MyObjectPojo>();
mapper.mapAsCollection(data, dataPojos, MyObjectPojo.class);
return dataPojos;
}
}