SpringMVC配置太多?试试SpringBoot


声明:本文转载自https://my.oschina.net/u/564178/blog/1551298,转载目的在于传递更多信息,仅供学习交流之用。如有侵权行为,请联系我,我会及时删除。

SpringMVC相信大家已经不再陌生了,大家可能对于Spring的各种XML配置已经产生了厌恶的感觉,Spring官方发布的Springboot 已经很长时间了,Springboot是一款“约定优于配置”的轻量级框架;Springboot首先解决的就是各种繁琐的XML配置,你可以不用任何XML配置,进行web服务的搭建,其次是Springboot本身就继承了web服务器,如果说前端开发人员想在本地启动后端服务不需要进行各种配置,几乎可以做到一键启动。

再有就是目前大热的微服务,而Springboot恰恰满足了快速开发微服务的开发场景;对于目前主流的框架Spring+MyBatis+redis的集成,好吧直接看代码...

以下代码是整个开发框架集成完之后的,关于Spring官方那一套如何编写启动类,如何配置端口这些随便google一大把的我就不再本文说明了。下面的代码,mybatis mapper我就不贴了,平常怎么写现在也一样,还有redis存数据取数据什么的。本文给的都是划的重点啊!

1.数据源以及其他的配置文件(PS:说好了不配置,怎么刚开始就上配置? 答:不配置也可以,如果你想把数据源硬编码写死的话。^_^)

下面给的是YML的配置文件方式,YML被各种主流的开发语言所支持,相当于常见的.properties文件。

jedis :    pool :      host : 127.0.0.1      port : 6379      config :        maxTotal: 100        maxIdle: 10        maxWaitMillis : 100000 server :    port :  8080     jdbc:     datasource:         name: test         url: jdbc:mysql://127.0.0.1:3306/test         username: root         password: 123456         # 使用druid数据源         type: com.alibaba.druid.pool.DruidDataSource         driver-class-name: com.mysql.jdbc.Driver         filters: stat         maxActive: 20         initialSize: 1         maxWait: 60000         minIdle: 1         timeBetweenEvictionRunsMillis: 60000         minEvictableIdleTimeMillis: 300000         validationQuery: select 'x'         testWhileIdle: true         testOnBorrow: false         testOnReturn: false         poolPreparedStatements: true         maxOpenPreparedStatements: 20 # MyBatis mybatis:     typeAliasesPackage: com.xiaour.spring.boot.entity     mapperLocations: classpath*:/com/xiaour/spring/boot/mapper/*.xml     configLocation: classpath:mybatis-config.xml       # LOGGING logging:     level:        com.ibatis:DEBUG

 2.Springboot启动类

package com.tony.spring.boot; import org.mybatis.spring.annotation.MapperScan; import org.mybatis.spring.boot.autoconfigure.MybatisAutoConfiguration; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.boot.context.embedded.ConfigurableEmbeddedServletContainer; import org.springframework.boot.context.embedded.EmbeddedServletContainerCustomizer; import org.springframework.boot.web.servlet.ServletComponentScan; import org.springframework.boot.web.support.SpringBootServletInitializer; /**  * Created by zhang.tao on 2017/4/19.  */ @SpringBootApplication(exclude = MybatisAutoConfiguration.class) @ServletComponentScan @EnableAutoConfiguration @MapperScan("com.tony.spring.boot.mapper") public class Application  extends SpringBootServletInitializer implements EmbeddedServletContainerCustomizer {     @Value("${server.port}")     private int port;//应用的端口     /**      * 启动入口      * @param args      */     public static void main(String ... args){         SpringApplication.run(Application.class, args);     }     /**      * 自定义端口      */     @Override     public void customize(ConfigurableEmbeddedServletContainer container) {         container.setPort(port);            } }

3.配置Mysql数据源

import java.sql.SQLException; import javax.sql.DataSource; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.transaction.annotation.EnableTransactionManagement; import com.alibaba.druid.pool.DruidDataSource; @Configuration @EnableTransactionManagement public class DataBaseConfiguration implements EnvironmentAware {     private RelaxedPropertyResolver propertyResolver;     private static Logger log = LoggerFactory.getLogger(DataBaseConfiguration.class);     private Environment env;     @Override     public void setEnvironment(Environment env) {         this.env = env;         this.propertyResolver = new RelaxedPropertyResolver(env, "jdbc.datasource.");     }     /**      * 配置数据源      * @Description TODO      * @return      */     @Bean(name = "dataSource",destroyMethod = "close")     public DataSource dataSource() {         log.debug(env.getActiveProfiles().toString());                      DruidDataSource dataSource = new DruidDataSource();           dataSource.setUrl(propertyResolver.getProperty("url"));           dataSource.setUsername(propertyResolver.getProperty("username"));//用户名           dataSource.setPassword(propertyResolver.getProperty("password"));//密码           dataSource.setDriverClassName(propertyResolver.getProperty("driver-class-name"));          dataSource.setInitialSize(Integer.parseInt(propertyResolver.getProperty("initialSize")));           dataSource.setMaxActive(Integer.parseInt(propertyResolver.getProperty("maxActive")));           dataSource.setMinIdle(Integer.parseInt(propertyResolver.getProperty("minIdle")));           dataSource.setMaxWait(Integer.parseInt(propertyResolver.getProperty("maxWait")));           dataSource.setTimeBetweenEvictionRunsMillis(Integer.parseInt(propertyResolver.getProperty("timeBetweenEvictionRunsMillis")));           dataSource.setMinEvictableIdleTimeMillis(Integer.parseInt(propertyResolver.getProperty("minEvictableIdleTimeMillis")));           dataSource.setValidationQuery(propertyResolver.getProperty("validationQuery"));           dataSource.setTestOnBorrow(Boolean.getBoolean(propertyResolver.getProperty("testOnBorrow")));           dataSource.setTestWhileIdle(Boolean.getBoolean(propertyResolver.getProperty("testWhileIdle")));           dataSource.setTestOnReturn(Boolean.getBoolean(propertyResolver.getProperty("testOnReturn")));           dataSource.setPoolPreparedStatements(Boolean.getBoolean(propertyResolver.getProperty("poolPreparedStatements")));           dataSource.setMaxPoolPreparedStatementPerConnectionSize(Integer.parseInt(propertyResolver.getProperty("maxOpenPreparedStatements")));           try {             dataSource.init();         } catch (SQLException e) {                       }          return dataSource;     } }

4.Redis数据源配置.

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import redis.clients.jedis.JedisPool; import redis.clients.jedis.JedisPoolConfig; /**  * 配置redis数据源  *  * @ClassName RedisConfig  * @author Zhang.Tao  * @Date 2017年4月24日 下午5:25:30  * @version V2.0.0  */ @Configuration public class RedisConfig {                @Bean(name= "jedis.pool")    @Autowired    public JedisPool jedisPool(@Qualifier("jedis.pool.config") JedisPoolConfig config,                 @Value("${jedis.pool.host}")String host,                 @Value("${jedis.pool.port}")int port) {        return new JedisPool(config, host, port);    }          @Bean(name= "jedis.pool.config")    public JedisPoolConfig jedisPoolConfig (@Value("${jedis.pool.config.maxTotal}")int maxTotal,                                @Value("${jedis.pool.config.maxIdle}")int maxIdle,                                @Value("${jedis.pool.config.maxWaitMillis}")int maxWaitMillis) {        JedisPoolConfig config = new JedisPoolConfig();        config.setMaxTotal(maxTotal);        config.setMaxIdle(maxIdle);        config.setMaxWaitMillis(maxWaitMillis);        return config;    } }

5.mybatis配置

import javax.annotation.Resource; import javax.persistence.EntityManager; import javax.sql.DataSource; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.apache.ibatis.session.SqlSessionFactory; import org.mybatis.spring.SqlSessionFactoryBean; import org.springframework.boot.autoconfigure.AutoConfigureAfter; import org.springframework.boot.autoconfigure.condition.ConditionalOnClass; import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.boot.bind.RelaxedPropertyResolver; import org.springframework.context.EnvironmentAware; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.core.env.Environment; import org.springframework.core.io.DefaultResourceLoader; import org.springframework.core.io.support.PathMatchingResourcePatternResolver; import org.springframework.jdbc.datasource.DataSourceTransactionManager; import org.springframework.transaction.annotation.EnableTransactionManagement; /**  * 初始化SqlSessionFactory  * @ClassName MybatisConfiguration  * @author Zhang.Tao  * @Date 2017年4月24日 下午5:24:56  * @version V2.0.0  */ @Configuration @ConditionalOnClass({ EnableTransactionManagement.class, EntityManager.class }) @AutoConfigureAfter({ DataBaseConfiguration.class }) public class MybatisConfiguration implements EnvironmentAware {     private static Log logger = LogFactory.getLog(MybatisConfiguration.class);     private RelaxedPropertyResolver propertyResolver;     @Resource(name = "dataSource")     DataSource dataSource;     @Override     public void setEnvironment(Environment environment) {         this.propertyResolver = new RelaxedPropertyResolver(environment,"mybatis.");     }     /**      * 初始化SessionFactory      * @Description TODO      * @return      */     @Bean     @ConditionalOnMissingBean     public SqlSessionFactory sqlSessionFactory() {         try {                           System.err.println(propertyResolver.getProperty("mapperLocations"));             SqlSessionFactoryBean sessionFactory = new SqlSessionFactoryBean();             sessionFactory.setDataSource(dataSource);             sessionFactory.setTypeAliasesPackage(propertyResolver                     .getProperty("typeAliasesPackage"));             sessionFactory                     .setMapperLocations(new PathMatchingResourcePatternResolver()                             .getResources(propertyResolver                                     .getProperty("mapperLocations")));             sessionFactory                     .setConfigLocation(new DefaultResourceLoader()                             .getResource(propertyResolver                                     .getProperty("configLocation")));             return sessionFactory.getObject();         } catch (Exception e) {             e.printStackTrace();             logger.warn("Could not confiure mybatis session factory");             return null;         }     }     @Bean     @ConditionalOnMissingBean     public DataSourceTransactionManager transactionManager() {         return new DataSourceTransactionManager(dataSource);     } }

6.MyBatis配置文件(这个和Spring没关系,是mybatis的,必须写没毛病啊,老铁)

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE configuration         PUBLIC "-//mybatis.org//DTD Config 3.0//EN"         "http://mybatis.org/dtd/mybatis-3-config.dtd"> <configuration>     <properties>         <property name="dialect" value="mysql" />     </properties>     <settings>         <!-- 这个配置使全局的映射器启用或禁用缓存。系统默认值是true,设置只是为了展示出来 -->         <setting name="cacheEnabled" value="true" />         <!-- 全局启用或禁用延迟加载。当禁用时,所有关联对象都会即时加载。 系统默认值是true,设置只是为了展示出来 -->         <setting name="lazyLoadingEnabled" value="true" />         <!-- 允许或不允许多种结果集从一个单独的语句中返回(需要适合的驱动)。 系统默认值是true,设置只是为了展示出来 -->         <setting name="multipleResultSetsEnabled" value="true" />         <!--使用列标签代替列名。不同的驱动在这方便表现不同。参考驱动文档或充分测试两种方法来决定所使用的驱动。 系统默认值是true,设置只是为了展示出来 -->         <setting name="useColumnLabel" value="true" />         <!--允许 JDBC 支持生成的键。需要适合的驱动。如果设置为 true 则这个设置强制生成的键被使用,尽管一些驱动拒绝兼容但仍然有效(比如             Derby)。 系统默认值是false,设置只是为了展示出来 -->         <setting name="useGeneratedKeys" value="false" />         <!--配置默认的执行器。SIMPLE 执行器没有什么特别之处。REUSE 执行器重用预处理语句。BATCH 执行器重用语句和批量更新 系统默认值是SIMPLE,设置只是为了展示出来 -->         <setting name="defaultExecutorType" value="SIMPLE" />         <!--设置超时时间,它决定驱动等待一个数据库响应的时间。 系统默认值是null,设置只是为了展示出来 -->         <setting name="defaultStatementTimeout" value="25000" />     </settings>     <plugins>         <plugin interceptor="com.github.pagehelper.PageHelper">             <property name="dialect" value="mysql" />             <property name="offsetAsPageNum" value="true" />             <property name="rowBoundsWithCount" value="true" />             <property name="pageSizeZero" value="true" />             <property name="reasonable" value="true" />         </plugin>     </plugins> </configuration>

7.API接口代码(是不是很6,想不想赞一下?)

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.tony.spring.boot.entity.UserInfo; import com.tony.spring.boot.mapper.UserInfoMapper; import com.tony.spring.boot.utils.JsonUtil; import com.tony.spring.boot.utils.RedisUtil; /**  * Created by Administrator on 2017/4/19.  */ @RestController @RequestMapping(value="/test") public class TestCtrl {           @Autowired     private RedisUtil redisUtil;           @Autowired      private UserInfoMapper userInfoMapper;      @RequestMapping(value="/index")     public String index(){         return "hello world";     }           /**      * 向redis存储值      * @param key      * @param value      * @return      * @throws Exception      */     @RequestMapping("/set")      public String set(String key, String value) throws Exception{          redisUtil.set(key, value);          return "success";      }            /**      * 获取redis中的值      * @param key      * @return      */     @RequestMapping("/get")      public String get(String key){          try {             return redisUtil.get(key);         } catch (Exception e) {             e.printStackTrace();         }         return "";      }            /**      * 获取数据库中的用户      * @Description TODO      * @param id      * @return      */     @RequestMapping("/getUser/{id}")      public String get(@PathVariable("id")int id){          try {             System.err.println(id);             UserInfo user= userInfoMapper.selectByPrimaryKey(id);             return JsonUtil.getJsonString(user);         } catch (Exception e) {             e.printStackTrace();         }         return "";      }  }

8.到这里基本上核心的东西差不多了,去Application.java启动就能用了。赶快试试吧

本文发表于2017年10月16日 16:39
(c)注:本文转载自https://my.oschina.net/u/564178/blog/1551298,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如有侵权行为,请联系我们,我们会及时删除.

阅读 1630 讨论 0 喜欢 0

抢先体验

扫码体验
趣味小程序
文字表情生成器

闪念胶囊

你要过得好哇,这样我才能恨你啊,你要是过得不好,我都不知道该恨你还是拥抱你啊。

直抵黄龙府,与诸君痛饮尔。

那时陪伴我的人啊,你们如今在何方。

不出意外的话,我们再也不会见了,祝你前程似锦。

这世界真好,吃野东西也要留出这条命来看看

快捷链接
网站地图
提交友链
Copyright © 2016 - 2021 Cion.
All Rights Reserved.
京ICP备2021004668号-1