温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Spring Boot中Idea如何从零开始初始化后台项目

发布时间:2021-12-21 15:10:13 来源:亿速云 阅读:150 作者:柒染 栏目:开发技术

这篇文章主要为大家展示了“Spring Boot中Idea如何从零开始初始化后台项目”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“Spring Boot中Idea如何从零开始初始化后台项目”这篇文章吧。

    1 创建项目

    1.1 填写项目基本信息

    打开Idea创建项目,如下图:

    Spring Boot中Idea如何从零开始初始化后台项目

    Spring Boot中Idea如何从零开始初始化后台项目

    Spring Boot中Idea如何从零开始初始化后台项目

    1.2 选择项目集成功能

    完成基本信息配置,在Web,SQL,NoSQL,Ops选项中,选择对应的模块依赖,最终选择如图以下几项:

    • Spring Web 用于提供web相关功能

    • Spring Data JPA用于提供数据库相关操作

    • MyBatis Framework用于通过MyBatis操作数据库

    • Spring Data Redis 用于提供Redis相关功能

    • Spring Boot Actuator 用于提供应用的健康监测功能

    设置完成后,点击下一步,Idea开始初始化项目文件。

    Spring Boot中Idea如何从零开始初始化后台项目

    2 项目基础配置

    通过上面步骤,已生成项目结构文件,等待开发环境自动构建好依赖库后可继续后续的工作。

    2.1 gradle文件配置

    当前项目使用gradle管理项目依赖,默认情况下,使用官方的依赖库,国内访问较慢,可替换为阿里云仓库。在build.gradle文件的repositories节点下添加阿里云仓库访问地址,设置完成后如下

    repositories {
        //使用阿里云仓库,提高国内依赖库下载速度
        maven { url "http://maven.aliyun.com/nexus/content/groups/public" }
        mavenCentral()
    }

    另外,添加其它常用依赖库,最终依赖包如下

    dependencies {
        implementation 'org.springframework.boot:spring-boot-starter-actuator'
        implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
        implementation 'org.springframework.boot:spring-boot-starter-data-redis'
        implementation 'org.springframework.boot:spring-boot-starter-web'
        implementation 'org.mybatis.spring.boot:mybatis-spring-boot-starter:2.1.2'
        implementation 'com.alibaba:fastjson:1.2.68'
        implementation 'org.apache.commons:commons-lang3:3.10'
        //数据库配置的日志类com.mysql.cj.log.Slf4JLogger在这个包中
        runtime('mysql:mysql-connector-java')
        testImplementation('org.springframework.boot:spring-boot-starter-test') {
            exclude group: 'org.junit.vintage', module: 'junit-vintage-engine'
        }
    }

    2.2 环境文件配置

    官方初始化器默认会在resources资源文件夹下生成一个application.properties文件,这里调整一下配置文件结构。在resources资源文件夹下创建config文件夹,移动application.properties文件到config文件夹下,同时在config文件夹下创建application-dev.properties文件和application-prod.properties文件,分别对应开发环境和线上环境的配置,可根据需要增加其它环境配置文件,文件格式为application-环境名称.properties。

    最终application.properties文件内容如下

    #默认启动dev环境
    spring.profiles.active=dev
    #调整web后台服务端口为9080,不设置默认为8080
    server.port=9080
    #mybatis配置文件地址
    mybatis.config-location=classpath:mybatis/mybatis-config.xml
    #mybatis mapper文件地址
    mybatis.mapper-locations=classpath:mybatis/mapper/*.xml

    application-dev.properties文件内容如下

    #mysql数据库连接
    spring.datasource.url=jdbc:mysql://localhost:3306/crane?autoReconnect=true&characterEncoding=UTF-8&useSSL=false&logger=com.mysql.cj.log.Slf4JLogger&profileSQL=true&maxQuerySizeToLog=8192
    #数据库登录名,docker镜像中的数据库
    spring.datasource.username=root
    #数据库密码
    spring.datasource.password=crane
    #本机docker镜像中的redis
    spring.redis.host=127.0.0.1
    #当前环境下日志配置 输出到控制台
    logging.config=classpath:logback-dev.xml
    #启用所有类型的健康监控
    management.endpoints.web.exposure.include=*

    application-prod.properties文件内容如下(目前和dev环境只对日志文件做了区分,可根据实际需要调整)

    #mysql数据库连接
    spring.datasource.url=jdbc:mysql://localhost:3306/crane?autoReconnect=true&characterEncoding=UTF-8&useSSL=false&logger=com.mysql.cj.log.Slf4JLogger&profileSQL=true&maxQuerySizeToLog=8192
    #数据库登录名,docker镜像中的数据库
    spring.datasource.username=root
    #数据库密码
    spring.datasource.password=crane
    #本机docker镜像中的redis
    spring.redis.host=127.0.0.1
    #当前环境下日志配置 输出到控制台
    logging.config=classpath:logback-prod.xml
    #启用所有类型的健康监控
    management.endpoints.web.exposure.include=*

    注意:配置数据库链接spring.datasource.url时需要注意,当前项目引用的mysql:mysql-connector-java为8.0.19版本,MySQL日志打印类Slf4JLogger类的路径为com.mysql.cj.log.Slf4JLogger,较老版本在com.mysql.jdbc.log.Slf4JLogger路径下。

    2.2.1 Logback配置文件

    dev环境对应logback配置文件logback-dev.xml内容如下,将日志输出到控制台。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
            <encoder>
                <pattern>%yellow([%date{yyyy-MM-dd HH:mm:ss.SSS}]) %highlight([%-5level]) %cyan([%thread])
                     - %msg [%logger{1}] \(%file:%line\) %n
                </pattern>
            </encoder>
        </appender>
        <root level="info">
            <appender-ref ref="STDOUT"/>
        </root>
    </configuration>

    prod环境对应logback配置文件logback-prod.xml内容如下,将日志输出到文件。

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration debug="true">
        <appender name="FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>log/hbackend.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
                <FileNamePattern>
                    log/hbackend-%d{yyyy-MM-dd}.log
                </FileNamePattern>
            </rollingPolicy>
            <encoder>
                <pattern>[%date{yyyy-MM-dd HH:mm:ss.SSS}] [%-5level] [%thread] - %msg [%logger{1}]
                    \(%file:%line\) %n
                </pattern>
            </encoder>
        </appender>
        <root level="info">
            <appender-ref ref="FILE"/>
        </root>
    </configuration>
    2.2.2 MyBatis配置文件

    mybatis-config.xml文件内容如下,目前没有任何配置,全部使用默认配置。

    <?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>
        <typeAliases>
        </typeAliases>
    </configuration>

    3 简单案例

    当前案例实现基础的Redis和MySQL操作,因为案例是模拟后端项目搭建过程,不涉及前端UI展示,所以一些接口使用Postman来测试可用性。项目源文件根文件夹下创建控制器类CommonController,用于为web请求提供数据响应,并设置控制器访问地址,如下

    @RestController
    @RequestMapping("/common")
    public class CommonController {
        private Logger logger = LoggerFactory.getLogger(this.getClass());
    }

    创建HResponse类,用于构造请求的响应结果,内容如下

    public class HResponse {
        /**
         * 请求结果的状态
         */
        private int status;
        private String description;
        private Object data;
        public HResponse() {
        }
        public HResponse(int status, String description, Object data) {
            this.status = status;
            this.description = description;
            this.data = data;
        }
        public static HResponse success() {
            return new HResponse(200, "操作成功", null);
        }
        public static HResponse success(String description) {
            return new HResponse(200, description, null);
        }
        public static HResponse success(Object data) {
            return new HResponse(200, "success", data);
        }
        public static HResponse success(String description, Object data) {
            return new HResponse(200, description, data);
        }
        public static HResponse error(String description) {
            return new HResponse(400, description, null);
        }
        public static HResponse error(String description, Object data) {
            return new HResponse(400, description, data);
        }
        public int getStatus() {
            return status;
        }
        public void setStatus(int status) {
            this.status = status;
        }
        public Object getData() {
            return data;
        }
        public void setData(Object data) {
            this.data = data;
        }
        public String getDescription() {
            return description;
        }
        public void setDescription(String description) {
            this.description = description;
        }
    }

    3.1 Redis案例

    使用StringRedisTemplate对Redis进行基本操作,这里简单提供查询Redis的key值和设置Redis的key值两个操作,在CommonController中添加代码如下

    	private final StringRedisTemplate redisTemplate;
        private final SqlSession sqlSession;
        public CommonController(StringRedisTemplate redisTemplate) {
            this.redisTemplate = redisTemplate;
        }
        @PostMapping("/getRedisValue")
        public HResponse getRedisValue(String key) {
            this.logger.info("请求获取redis key为:{} 的值", key);
            return HResponse.success(new JSONObject().fluentPut("key", key).fluentPut("value", this.redisTemplate.opsForValue().get(key)));
        }
        @PostMapping("/setRedisValue")
        public HResponse getRedisValue(String key, String value) {
            if (StringUtils.isBlank(key)) {
                return HResponse.error("键 不能为空");
            }
            if (StringUtils.isBlank(value)) {
                return HResponse.error("值 不能为空");
            }
            this.logger.info("请求设置redis key为:{} 的值为 {}", key, value);
            this.redisTemplate.opsForValue().set(key.trim(), value.trim());
            return HResponse.success();
        }

    启动redis的docker容器并运行当前案例,使用Postman发送请求设置和查询redis中对应的key值,请求响应如下图

    Spring Boot中Idea如何从零开始初始化后台项目

    Spring Boot中Idea如何从零开始初始化后台项目

    3.2 MySQL案例

    简单介绍两种从MySQL查询数据的案例,JPA方式和MyBatis方式。先启动好MySQL的docker容器,然后创建表h_company并插入一条数据,最终数据表结果如下图:

    Spring Boot中Idea如何从零开始初始化后台项目

    Spring Boot中Idea如何从零开始初始化后台项目

    3.2.1 JPA方式

    构造HCompany数据库映射类和对应的数据库表访问接口CompanyRepository,内容如下:

    @Entity
    @Table(name = "h_company")
    @Where(clause = "id > 0")
    public class HCompany {
        @Id
        @GeneratedValue(strategy = GenerationType.IDENTITY)
        private Integer id;
        private String name;
        private String shortName;
        private String address;
        private String tel;
        private String remark;
        public Integer getId() {
            return id;
        }
        public void setId(Integer id) {
            this.id = id;
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
        public String getShortName() {
            return shortName;
        }
        public void setShortName(String shortName) {
            this.shortName = shortName;
        }
        public String getAddress() {
            return address;
        }
        public void setAddress(String address) {
            this.address = address;
        }
        public String getTel() {
            return tel;
        }
        public void setTel(String tel) {
            this.tel = tel;
        }
        public String getRemark() {
            return remark;
        }
        public void setRemark(String remark) {
            this.remark = remark;
        }
    }
    @Repository
    @Where(clause = "id > 0")
    public interface CompanyRepository extends PagingAndSortingRepository<HCompany, Integer>, JpaRepository<HCompany, Integer> {
    }

    在控制器CommonController中添加使用CompanyRepository查询数据库的方法:

    @PostMapping("/getAllCompany")
        public HResponse getAllCompany() {
            return HResponse.success(this.companyRepository.findAll());
        }

    使用Postman调用查询,响应如下

    Spring Boot中Idea如何从零开始初始化后台项目

    3.2.2 MyBatis方式

    使用SqlSession接口访问数据库,创建company.xmlmapper文件,内容如下

    <?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="company">
        <select id="getAll" resultType="java.util.Map">
            select * from h_company
        </select>
    </mapper>

    控制器CommonController中添加通过MyBatis获取数据的方法,如下

    @PostMapping("/getAllCompanyByMybatis")
        public HResponse getAllCompanyByMybatis() {
            return HResponse.success(this.sqlSession.selectList("company.getAll"));
        }

    重新启动项目,然后通过Postman访问,响应如下:

    Spring Boot中Idea如何从零开始初始化后台项目

    3.3 控制器完整代码

    完成以上步骤后,控制器CommonController完整内容如下:

    @RestController
    @RequestMapping("/common")
    public class CommonController {
        private Logger logger = LoggerFactory.getLogger(this.getClass());
        private final StringRedisTemplate redisTemplate;
        private final CompanyRepository companyRepository;
        private final SqlSession sqlSession;
        public CommonController(StringRedisTemplate redisTemplate, CompanyRepository companyRepository, SqlSession sqlSession) {
            this.redisTemplate = redisTemplate;
            this.companyRepository = companyRepository;
            this.sqlSession = sqlSession;
        }
        @PostMapping("/getRedisValue")
        public HResponse getRedisValue(String key) {
            this.logger.info("请求获取redis key为:{} 的值", key);
            return HResponse.success(new JSONObject().fluentPut("key", key).fluentPut("value", this.redisTemplate.opsForValue().get(key)));
        }
        @PostMapping("/setRedisValue")
        public HResponse getRedisValue(String key, String value) {
            if (StringUtils.isBlank(key)) {
                return HResponse.error("键 不能为空");
            }
            if (StringUtils.isBlank(value)) {
                return HResponse.error("值 不能为空");
            }
            this.logger.info("请求设置redis key为:{} 的值为 {}", key, value);
            this.redisTemplate.opsForValue().set(key.trim(), value.trim());
            return HResponse.success();
        }
        @PostMapping("/getAllCompany")
        public HResponse getAllCompany() {
            return HResponse.success(this.companyRepository.findAll());
        }
        @PostMapping("/getAllCompanyByMybatis")
        public HResponse getAllCompanyByMybatis() {
            return HResponse.success(this.sqlSession.selectList("company.getAll"));
        }
    }

    4 健康监测

    案例启用了完整的项目监测,可通过http://localhost:9080/actuator查看,每个监测项都对应相应的查看链接,如下图。

    Spring Boot中Idea如何从零开始初始化后台项目

    5 项目结构

    完成以上配置及案例后,项目结构如下图:

    Spring Boot中Idea如何从零开始初始化后台项目

    以上是“Spring Boot中Idea如何从零开始初始化后台项目”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注亿速云行业资讯频道!

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    AI