包结构示意图
Jdbc配置类
这里使用了PropertySource注解引入外部文件
properties配置文件在此省略了
@PropertySource("classpath:jdbc.properties")
public class JdbcConfig {
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.password}")
private String password;
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.username}")
private String username;
//设置连接池
@Bean
public DataSource dataSource(){
DruidDataSource dataSource = new DruidDataSource();
dataSource.setDriverClassName(driver);
dataSource.setUrl(url);
dataSource.setUsername(username);
dataSource.setPassword(password);
return dataSource;
}
//设置事务管理器 (声明式事务)
@Bean
public PlatformTransactionManager transactionManager(DataSource dataSource){
//DataSourceTransactionManager搭配mybatis
DataSourceTransactionManager ds = new DataSourceTransactionManager();
ds.setDataSource(dataSource);
return ds;
}
}
Mybatis配置类
public class MybatisConfig {
// 创建sqlsession工厂,并扫描实体类
@Bean
public SqlSessionFactoryBean sqlSessionFactory(DataSource dataSource){
SqlSessionFactoryBean factoryBean = new SqlSessionFactoryBean();
factoryBean.setDataSource(dataSource);
factoryBean.setTypeAliasesPackage("com.rhl.pojo");
return factoryBean;
}
}
servlet配置类
这里集继承AbstractAnnotationConfigDispatcherServletInitializer类,可以快速初始化Servlet3.0环境
public class ServletConfig extends AbstractAnnotationConfigDispatcherServletInitializer {
protected Class<?>[] getRootConfigClasses() {
//指定spring配置加载(根配置)
return new Class[]{SpringConfig.class};
}
protected Class<?>[] getServletConfigClasses() {
//指定springmvc配置加载
return new Class[]{SpringMvcConfig.class};
}
protected String[] getServletMappings() {
//配置springmvc拦截路径为 / (全路径)
return new String[]{"/"};
}
//中文乱码过滤器
@Override
protected Filter[] getServletFilters() {
CharacterEncodingFilter encodingFilter = new CharacterEncodingFilter();
encodingFilter.setEncoding("utf-8");
return new Filter[]{encodingFilter};
}
}
Spring配置类
@Configuration
@ComponentScan(value = "com.rhl",
excludeFilters ={@ComponentScan.Filter(
type = FilterType.ANNOTATION,
classes = {RestController.class, Controller.class, RestControllerAdvice.class})} )
//@ComponentScan.Filter注解可以过滤重复扫描的注解,提高效率
//@EnableAspectJAutoProxy//开启AOP注解支持
@Import({JdbcConfig.class,MybatisConfig.class}) //引入外部配置
@EnableTransactionManagement//开启事务管理,底层对事务注解支持
@MapperScan("com/rhl/mapper")
public class SpringConfig {
}
SpringMvc配置类
@ComponentScan({"com.rhl.controller","com.rhl.advice"})//扫描web层资源,并加入IOC容器
//@EnableWebMvc//注解底层以来与DispatcherServlet,而servlet的启动依赖于servlet容器
@EnableWebMvc//开启springMvc扩展功能的支持,包含:json与javabean的转换、日期格式等转换、自定义转换等等
public class SpringMvcConfig implements WebMvcConfigurer {
@Override
public void addResourceHandlers(ResourceHandlerRegistry registry) {
//放行静态资源 这里只是举例
registry.addResourceHandler("/css/**").addResourceLocations("/css/");
registry.addResourceHandler("/js/**").addResourceLocations("/js/");
registry.addResourceHandler("/pages/**").addResourceLocations("/pages/");
registry.addResourceHandler("/plugins/**").addResourceLocations("/plugins/");
}
}
异常分为三类,我们首先注册一个异常处理器
@RestControllerAdvice
public class ProjectExceptionAdvice {
//专门处理BusinessException
@ExceptionHandler(BusinessException.class)
public Result doBusinessException(BusinessException ex){
//发送对应消息传递给用户,提醒规范操作
return new Result(ex.getCode(),ex.getMessage());
}
//专门处理SystemException
@ExceptionHandler(SystemException.class)
public Result doSystemException(SystemException ex){
// 发送固定消息传递给用户,安抚用户
// 发送特定消息给运维人员,提醒维护
// 记录日志
return new Result(ex.getCode(),ex.getMessage());
}
//处理其他未知异常
@ExceptionHandler(Exception.class)
public Result doException(Exception ex){
return new Result(Code.SYSTEM_UNKNOW_ERR,"服务器正在维护,请稍后访问");
}
}
public class BusinessException extends RuntimeException{
//异常的状态码
private Integer code;
public BusinessException(Integer code,String message){
super(message);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
public class SystemException extends RuntimeException{
//异常的状态码
private Integer code;
public SystemException(Integer code, String message){
super(message);
this.code = code;
}
public Integer getCode() {
return code;
}
public void setCode(Integer code) {
this.code = code;
}
}
版权声明:本文为weixin_50965314原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。