<aop:config> <aop:pointcut id="mmethod" expression="execution(* com.jc.bus.jttsp.service.*.*(..))" /> <aop:advisor advice-ref="txAdvice" pointcut-ref="mmethod" /> </aop:config>
首先检查切点是不是有问题。
@Service注解如果被SpringMVC扫描到那么Service是不存在事务属性。
package com.jc.spring.main;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.List;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.core.io.FileSystemResource;
import org.springframework.http.converter.HttpMessageConverter;
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.databind.introspect.JacksonAnnotationIntrospector;
@Configuration
@EnableWebMvc
@ComponentScan(basePackages={"com.jc.bus.*.web.**"})
public class WebConfig extends WebMvcConfigurerAdapter{
@Bean
public ViewResolver viewresolver(){
InternalResourceViewResolver resolver = new InternalResourceViewResolver();
resolver.setPrefix("/WEB-INF/view/");
resolver.setSuffix(".jsp");
resolver.setExposeContextBeansAsAttributes(true);
return resolver;
}
@Bean
public MultipartResolver multipartResolver() throws IOException{
CommonsMultipartResolver cmr = new CommonsMultipartResolver();
cmr.setUploadTempDir(new FileSystemResource("/tmp/file"));
cmr.setMaxUploadSize(1048576);
cmr.setMaxInMemorySize(0);
return cmr;
}
@Override
public void configureMessageConverters(List<HttpMessageConverter<?>> converters) {
converters.add(mappingJacksonHttpMessageConverter());
super.configureMessageConverters(converters);
}
@Bean
public JacksonAnnotationIntrospector jacksonAnnotationIntrospector() {
return new JacksonAnnotationIntrospector();
}
@Bean(name = "objectMapper")
public ObjectMapper objectMapper() {
ObjectMapper mapper = new ObjectMapper();
mapper.configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false);
mapper.configure(SerializationFeature.INDENT_OUTPUT, false);
mapper.setAnnotationIntrospector(jacksonAnnotationIntrospector());
mapper.setDateFormat(new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"));
return mapper;
}
@Bean
public RequestMappingHandlerAdapter requestMappingHandlerAdapter(){
RequestMappingHandlerAdapter amga = new RequestMappingHandlerAdapter();
List<HttpMessageConverter<?>> ls = new ArrayList<HttpMessageConverter<?>>();
ls.add(mappingJacksonHttpMessageConverter());
amga.setMessageConverters(ls);
return amga;
}
@Bean
public MappingJackson2HttpMessageConverter mappingJacksonHttpMessageConverter() {
MappingJackson2HttpMessageConverter messageConverter = new MappingJackson2HttpMessageConverter();
messageConverter.setObjectMapper(objectMapper());
return messageConverter;
}
@Override
public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
// TODO Auto-generated method stub
configurer.enable();
}
}
如果发现SpringMVC包的确扫描了service,那么自行处理一下,使用Spring扫描service就可以了。
package com.jc.spring.main;
import javax.annotation.Resource;
import javax.sql.DataSource;
import org.springframework.context.ApplicationContext;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ComponentScan.Filter;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.FilterType;
import org.springframework.context.annotation.ImportResource;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import com.jc.spring.extend.SpringContextHolder;
@Configuration
@ComponentScan(basePackages = { "com.jc.spring.extend.**","com.jc.bus.*.service.**" }, excludeFilters = { @Filter(type = FilterType.ANNOTATION, value = EnableWebMvc.class) })
@ImportResource(value = { "classpath:/com/jc/spring/main/spring-transaction.xml" })
public class RootConfig {
@Resource(name = "dataSource")
DataSource dataSource;
@Bean(name = "jdbcTemplate")
public JdbcTemplate jdbcTemplate() {
return new JdbcTemplate(dataSource);
}
}