美文网首页Java学习笔记Java 杂谈点亮技术栈
Spring Boot 工程搭建记录(一)

Spring Boot 工程搭建记录(一)

作者: 刘笔尖儿 | 来源:发表于2019-04-09 17:20 被阅读0次

    因为最近在做Spring Boot 的工程改造,正好积累了一点工程经验,这里记录一下。


    首先说一下改造过程感受。

    Spring Boot,因为有parent pom 的支持(这轮子够大),默认已经整合了很多功能。按照约定大于配置的原则,尽可能的减少配置,通过注解和默认约定,给使用者带来了更多的方便。所以在改造的过程中,看到xml就别扭,必须想办法给干掉。

    在这几天接触Spring Boot 和Spring Cloud的过程中。对Boot的使用也有了些认识。

    那么今天来从零搭建一下这个Spring Boot 工程。和改造MVC工程比起来,简直是太爽了。


    一、创建pom工程

    首先创建一个pom工程。

    创建父pom

    这里一路next即可。

    然后分层创建module。操作相同,这里以controller层为例。

    创建子module

    接下来依然是一路next。创建模块结束。相同操作,创建其他模块,这里根据各自的工程接口自行定义。

    module 结构

    工程整体结构创建就这样结束了。简单易操作。

    二、文件配置

    Spring Boot 的约定大于配置,还有一个优点就是配置大于代码。所以必要的配置也是必不可少的。

    这里主要配置Boot框架使用到的依赖,目前配置有:Spring Boot,Durid,Mybatis。所以需要对这些进行相应的配置。

    在资源目录创建application.yml文件(这就是约定),添加如下配置:

    server:
      port: 8990
    
    #datasource
    spring:
      datasource:
        #durid 数据源
        type: com.alibaba.druid.pool.DruidDataSource
        url: jdbc:mysql://localhost:3306/zhenaiapi?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: 用户名
        password: 密码
        driver-class-name: com.mysql.jdbc.Driver
        #这里需要注意的就是这里可以配置dbcp2和tomcat连接配置,我配置的是dbcp2
        dbcp2:
          initial-size: 5
          min-idle: 5
          max-total: 20
          max-wait-millis: 60000
          time-between-eviction-runs-millis: 60000
          min-evictable-idle-time-millis: 3000
          validation-query: SELECT 1 FROM DUAL
          test-while-idle: false
          test-on-return: false
          pool-prepared-statements: true
      thymeleaf:
        cache: false
    #一定要配置好这里的mapper路径,否则导致不能搜索到
    mybatis:
      mapper-locations: classpath:mapper/*Mapper.xml
    

    以上这些基本是一些常规配置,如果需要特殊配置,可以查看spring-configuration说明。

    三、添加pom依赖

    工程之所以能使用Spring Boot 特性,也就靠这些了。

     <dependencies>
            <!-- spring boot -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-aop</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-autoconfigure</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-tomcat</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
            </dependency>
            <dependency>
                <groupId>org.mybatis.spring.boot</groupId>
                <artifactId>mybatis-spring-boot-starter</artifactId>
                <version>2.0.0</version>
            </dependency>
    
            <!--druid -->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>druid</artifactId>
                <version>1.1.14</version>
            </dependency>
    
            <!-- mysql -->
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <version>8.0.15</version>
            </dependency>
    
            <!-- thmleaf模板依赖. -->
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-thymeleaf</artifactId>
            </dependency>
    
            <!--Lombok-->
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <version>1.18.6</version>
            </dependency>
    
            <!--fastjson-->
            <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.56</version>
            </dependency>
    
        </dependencies>
    

    四、添加druid配置

    这里需要配置一下,主要是为了配置数据库参数和Durid监控。废话少说,直接撸代码。

    @Configuration
    public class DruidConfiguration {
    
        private static final Logger logger = LoggerFactory.getLogger(DruidConfiguration.class);
    
        @Bean
        public ServletRegistrationBean druidServlet() {
            logger.info("init Druid Servlet Configuration ");
            ServletRegistrationBean servletRegistrationBean = new ServletRegistrationBean();
            servletRegistrationBean.setServlet(new StatViewServlet());
            servletRegistrationBean.addUrlMappings("/druid/*");
            Map<String, String> initParameters = new HashMap<String, String>();
            initParameters.put("loginUsername", "admin");// 用户名
            initParameters.put("loginPassword", "admin");// 密码
            initParameters.put("resetEnable", "false");// 禁用HTML页面上的“Reset All”功能
            initParameters.put("allow", ""); // IP白名单 (没有配置或者为空,则允许所有访问)
            servletRegistrationBean.setInitParameters(initParameters);
            return servletRegistrationBean;
        }
    
            @Bean
            public FilterRegistrationBean filterRegistrationBean() {
                FilterRegistrationBean filterRegistrationBean = new FilterRegistrationBean();
                filterRegistrationBean.setFilter(new WebStatFilter());
    
                // 添加过滤规则
                filterRegistrationBean.addUrlPatterns("/*");
    
                // 添加不需要忽略的格式信息.
                filterRegistrationBean.addInitParameter("exclusions", "*.js,*.gif,*.jpg,*.png,*.css,*.ico,/druid/*");
                return filterRegistrationBean;
            }
    
            @Bean
            @ConfigurationProperties(prefix = "spring.datasource")
            public DataSource druidDataSource() {
                return new DruidDataSource();
            }
    
    }
    

    通过这个配置,服务启动之后,可以查看druid的监控情况。

    访问地址:http://127.0.0.1:8990/druid/index.html

    创建子module

    五、最后一步,业务代码

    基本的配置已经结束。接下来就是常规操作,创建controller,service,mapper,dao层,开始调用代码。

    建表

    这里使用本地mysql,通过

    Controller

    @RestController
    @RequestMapping("/api/user")
    public class UserController {
    
        @Resource
        UserService userService;
    
        @RequestMapping(value = "getUsersById",method = RequestMethod.GET, produces = "application/json;charset=utf-8")
        DataResult<UserVo> getUsersById(@RequestParam("userId") Long userId){
    
            DataResult<UserVo> dataResult = new DataResult<>();
            dataResult.setData(userService.getUserById(userId));
            return dataResult;
        }
    
    }
    

    Service

    @Service
    @Slf4j
    public class UserService {
    
        Logger logger = LoggerFactory.getLogger(UserService.class);
    
        @Resource
        UserMapper userMapper;
    
        public UserVo getUserById(Long userId) {
            logger.info("userId is {}",userId);
            User user = userMapper.selectByPrimaryKey(userId);
            UserVo userVo = new UserVo();
            BeanUtils.copyProperties(user,userVo);
            return userVo;
    
        }
    }
    

    Mapper

    @Mapper
    public interface UserMapper {
    
        User selectByPrimaryKey(@Param("userId") Long userId);
    
    }
    

    mapper.xml

    这里使用本地的mysql数据库,创建一个user表,测试使用。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
    <mapper namespace="com.gitlearn.mapper.UserMapper" >
        <resultMap id="BaseResultMap" type="com.gitlearn.dao.User" >
            <id column="id" property="id" jdbcType="INTEGER" />
            <id column="user_code" property="userCode" jdbcType="INTEGER" />
            <result column="name" property="name" jdbcType="VARCHAR" />
            <result column="age" property="age" jdbcType="VARCHAR" />
        </resultMap>
    
        <sql id="Base_Column_List" >
        id, user_code, name, age
      </sql>
    
        <select id="selectByPrimaryKey" resultMap="BaseResultMap" parameterType="java.lang.Long" >
            select
            <include refid="Base_Column_List" />
            from user
            where id = #{userId,jdbcType=INTEGER}
        </select>
    </mapper>
    

    六、验证

    一切准备就绪,如果顺利,启动工程,我们将看到下面一段代码。

    Started ApiStartApplication in 9.27 seconds (JVM running for 10.686)

    接下来就是用PostMan测试接口:http://localhost:9653/api/user/getUsersById?userId=我需要一个int来替换

    返回结果:

    {
        "code": 200,
        "message": "SUCESS",
        "data": {
            "id": 我就是你要查的那个userId,
            "userCode": 1,
            "name": "sring boot",
            "age": 5
        }
    }
    

    七、总结

    工程从零开始,其实也是一种幸福,本篇大致记录了Spring Boot工程初步搭建过程,然后顺手把数据库加上。要想能够使用,还有很多工作要做。

    还是那句话,代码就分两种,自己的和别人的。现在是理解并使用别人代码的第一步,理解是使用的基础。刚迈出这一步,就感觉脚下有点软,前面路很长。

    我得跑一跑......

    喜欢我的文章可以关注我的公众号:蓁爱学习


    蓁爱学习

    相关文章

      网友评论

        本文标题:Spring Boot 工程搭建记录(一)

        本文链接:https://www.haomeiwen.com/subject/qtsiiqtx.html