Spring Boot的web基础配置
1、自定义拦截器
增加一个拦截器,需要通过继承WebMvcConfigurerAdapter然后重写父类中的方法进行扩展。
@Configuration
public class MySpringMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void addInterceptors(InterceptorRegistry registry) {HandlerInterceptor handlerInterceptor = new HandlerInterceptor() {@Overridepublic boolean preHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o) throws Exception {System.out.println("自定义拦截器。。。");return true;}@Overridepublic void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {}@Overridepublic void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {}};// 添加拦截器并设置拦截规则registry.addInterceptor(handlerInterceptor).addPathPatterns("/**");}
}
2、自定义消息转化器
自定义消息转化器有两种实现方式,一种是@Bean方式,另一种是自定义拦截器。
1)@Bean方式
只需要在@Configuration的类中添加消息转化器的@bean加入到Spring容器,就会被Spring Boot自动加入到容器中。
// spring boot默认就有消息转化器,其编码格式为utf-8
@Bean
public StringHttpMessageConverter stringHttpMessageConverter() {StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));return stringHttpMessageConverter;
}
2)自定义拦截器方式
WebMvcConfigurerAdapter的功能很强大,除了可以配置拦截器外,还可以配置消息转换器。
@Configuration
public class MySpringMvcConfig extends WebMvcConfigurerAdapter {@Overridepublic void configureMessageConverters(List<HttpMessageConverter<?>> converters) {StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter(Charset.forName("UTF-8"));converters.add(stringHttpMessageConverter);}
}
3、读取外部的配置文件
@Configuration
@PropertySource(value = { "classpath:jdbc.properties", "classpath:base.properties" }, ignoreResourceNotFound = true)
public class 任意类 {}
4、Druid DataSource的配置
Druid提供了一个高效、功能强大、可扩展性好的数据库连接池,常用于替换DBCP和C3P0。
1)引入依赖
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.0.11</version>
</dependency>
2)jdbc.properties
项目中一般会创建一个jdbc.properties文件来记录数据库的连接信息。
#MySQL
jdbc.url=jdbc:mysql://127.0.0.1:3306/dbxxx?useUnicode=true&characterEncoding=utf-8
jdbc.username=root
jdbc.password=123456
#Druid
jdbc.initialSize=0
jdbc.minIdle=0
jdbc.maxActive=150
3)配置Druid数据源
建议将配置Druid数据源的操作放在@SpringBootApplication注解的类中。
@SpringBootApplication
@Configuration
@PropertySource(value = {"classpath:jdbc.properties"})
public class MyWebApplication{@Value("${jdbc.url}")public String jdbcUrl;@Value("${jdbc.username}")public String jdbcUsername;@Value("${jdbc.password}")public String jdbcPassword;@Value("${jdbc.initialSize}")public int jdbcInitialSize;@Value("${jdbc.minIdle}")public int jdbcMinIdle;@Value("${jdbc.maxActive}")public int jdbcMaxActive;@Beanpublic ServletRegistrationBean druidServletRegistrationBean() {ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();servletRegistrationBean.setServlet(new StatViewServlet());servletRegistrationBean.addUrlMappings("/druid/*");return servletRegistrationBean;}@Beanpublic FilterRegistrationBean duridFilterRegistrationBean() {FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();filterRegistrationBean.setFilter(new WebStatFilter());HashMap<String, String> initParams = new HashMap<>();// 设置忽略请求initParams.put("exclusions", "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*");filterRegistrationBean.setInitParameters(initParams);filterRegistrationBean.addUrlPatterns("/*");return filterRegistrationBean;}@Bean(initMethod = "init", destroyMethod = "close")public DruidDataSource druidDataSource() {DruidDataSource druidDataSource = new DruidDataSource();druidDataSource.setUrl(jdbcUrl);druidDataSource.setUsername(jdbcUsername);druidDataSource.setPassword(jdbcPassword);druidDataSource.setInitialSize(jdbcInitialSize);druidDataSource.setMinIdle(jdbcMinIdle);druidDataSource.setMaxActive(jdbcMaxActive);return druidDataSource;}
}
5、数据库框架集成
1)jpa集成
在pom.xml中引用jpa及数据库驱动(如:mysql)依赖
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
在application.yml文件中配置
spring:datasource:driver-class-name: com.mysql.jdbc.Driverurl: jdbc:mysql://127.0.0.1/dbgirlusername: rootpassword: 123456jpa:hibernate:ddl-auto: update #第一次加载hibernate时根据model类会自动建立起表的结构(前提是先建立好数据库),以后加载hibernate时根据 model类自动更新表结构,即使表结构改变了但表中的行仍然存在不会删除以前的行。要注意的是当部署到服务器后,表结构是不会被马上建立起来的,是要等 应用第一次运行起来后才会。show-sql: true
2)MyBatis集成
Mybatis和Spring Boot的整合有两种方式:
第一种:使用mybatis官方提供的Spring Boot整合包实现,地址:spring-boot-starter
第二种:使用mybatis-spring整合的方式,也就是我们传统的方式
这里推荐并使用第二种方式,因为可以很方便的控制Mybatis的各种配置。这里假设你已经配置过数据源了(数据源可以是druid、dbcp、c3p0...)。
首先,需要在pom.xml文件中引用mybatis依赖
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis</artifactId><version>3.3.0</version>
</dependency>
<dependency><groupId>org.mybatis</groupId><artifactId>mybatis-spring</artifactId><version>1.2.2</version>
</dependency>
然后,创建一个Mybatis的配置类:
@Configuration
public class MybatisConfig {@AutowiredDruidDataSource druidDataSource;@Bean@ConditionalOnMissingBean// 当Spring容器中没有SqlSessionFactoryBean时才创建public SqlSessionFactoryBean sqlSessionFactoryBean() {SqlSessionFactoryBean sqlSessionFactory = new SqlSessionFactoryBean();// 设置数据源sqlSessionFactory.setDataSource(druidDataSource);// 设置别名扫描包sqlSessionFactory.setTypeAliasesPackage("com.lqr.demo3.bean");// 设置Mybatis的配置文件位置PathMatchingResourcePatternResolver resolver = new PathMatchingResourcePatternResolver();Resource mybatisConfigXml = resolver.getResource("classpath:mybatis-config.xml");sqlSessionFactory.setConfigLocation(mybatisConfigXml);return sqlSessionFactory;}}
最后,创建Mapper接口的扫描类MapperScannerConfig:
@Configuration
@AutoConfigureAfter(MybatisConfig.class)// Mybatis的扫描配置必须在SqlSessionFactory被创建之后
public class MapperScanConfig {@Beanpublic MapperScannerConfigurer mapperScannerConfigurer() {MapperScannerConfigurer mapperScannerConfigurer = new MapperScannerConfigurer();mapperScannerConfigurer.setBasePackage("com.lqr.demo3.mapper");return mapperScannerConfigurer;}}
6、设置事务管理
Spring Boot中推荐使用@Transactional注解来申明事务。
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
当引入jdbc依赖之后,Spring Boot会自动默认分别注入DataSourceTransactionManager或JpaTransactionManager,所以我们不需要任何额外配置就可以用@Transactional注解进行事务的使用。
@Service
@Transactional
public class GirlService {@Transactionalpublic void insertGirl() {Girl girlA = new Girl();girlA.setCupSize("A");girlA.setAge(18);girlRespository.save(girlA);}
}
@Transactional不仅可以注解在方法,也可以注解在类上。当注解在类上时,意味着此类所有public方法都会开启事务。如果类级别和方法级别同时使用了@Transactional注解,则使用在类级别的注解会重载方法级别的注解。
7、开启jsp支持
Spring boot默认内嵌的tomcat是不支持jsp页面的,如果项目中使用到了jsp,需要导入如下依赖才能正常访问。
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId><scope>provided</scope>
</dependency>
