springboot 搭建(一)基础搭建

之前写过一篇关于springboot的搭建,由于是初学,写的不是很好,最近重新学习springboot,这里记录一下比较全的搭建,并集成其他功能

1.环境  STS(其他开发工具大同小异)  , maven 3.6 、  jdk1.8  ,springboot版本 2.1.2

2.创建简单的maven项目,在pom文件中引入以下依赖

<!-- 编码格式和编译版本 -->
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
    </properties>
    <!-- 父依赖  -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.2.RELEASE</version>
    </parent>
    <dependencies>
        <!-- web支持 -->
	    <dependency>
	        <groupId>org.springframework.boot</groupId>
	        <artifactId>spring-boot-starter-web</artifactId>
	        <!-- 排除默认日志,加入log4j2 -->
	        <exclusions>
	        	<exclusion>
	        		<groupId>org.springframework.boot</groupId>
	        		<artifactId>spring-boot-starter-logging</artifactId>
	        	</exclusion>
	        </exclusions>
	    </dependency>
        <!-- 日志,如果不排除掉上面的日志,这个不生效 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-log4j2</artifactId>
        </dependency>

最主要的就是父依赖,和一个 web 支持的依赖,就可以完成最简单的项目,写一个方法测试一下

目录结构如上图,App这个类要在其他类的上级或同级目录,原因在于@SpringBootApplication这个标签默认扫描规则,

启动main方法,浏览器输入 localhost:8080/hello

最基本的项目搭建完成,集成其他功能

3.热部署

eclipse中只需要加入一个依赖即可

 <!-- 热部署,在idea中需要加入插件,并且将编译改成自动编译 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
        </dependency>

这时不需要重启项目,保存后即可直接访问,实现热部署

4.集成mybatis

引入mybatis依赖和数据库连接池依赖

 <!-- 集成mybatis -->
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>1.2.0</version>
        </dependency>
        <!-- mysql驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
        </dependency>

5.逆向工程生成实体,mapper接口和mapper的xml文件,首先在mysql数据库中新建一张表

写一个逆向工程的配置文件

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" 
"http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd">
<generatorConfiguration>
    <!-- 数据库驱动:选择你的本地硬盘上面的数据库驱动包-->
    <classPathEntry  location="D:\repository\mysql\mysql-connector-java\5.1.46\mysql-connector-java-5.1.46.jar"/>
    <context id="DB2Tables"  targetRuntime="MyBatis3">
        <commentGenerator>
            <property name="suppressDate" value="true"/>
            <!-- 是否去除自动生成的注释 true:是 : false:否 -->
            <property name="suppressAllComments" value="true"/>
        </commentGenerator>
        <!--数据库链接URL,用户名、密码 -->
        <jdbcConnection driverClass="com.mysql.jdbc.Driver" connectionURL="jdbc:mysql://localhost:3306/sb" userId="root" password="1234">
        </jdbcConnection>
        <javaTypeResolver>
            <property name="forceBigDecimals" value="false"/>
        </javaTypeResolver>
        <!-- 生成模型的包名和位置-->
        <javaModelGenerator targetPackage="com.enjoy.domain" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
            <property name="trimStrings" value="true"/>
        </javaModelGenerator>
        <!-- 生成映射文件的包名和位置-->
        <sqlMapGenerator targetPackage="mapper" targetProject="src/main/resources">
            <property name="enableSubPackages" value="true"/>
        </sqlMapGenerator>
        <!-- 生成DAO的包名和位置-->
        <javaClientGenerator type="XMLMAPPER" targetPackage="com.enjoy.dao" targetProject="src/main/java">
            <property name="enableSubPackages" value="true"/>
        </javaClientGenerator>
        <!-- 要生成的表 tableName是数据库中的表名或视图名 domainObjectName是实体类名-->
        <table tableName="enjoy_user" domainObjectName="User" enableCountByExample="false" 
        enableUpdateByExample="false" enableDeleteByExample="false" 
        enableSelectByExample="false" selectByExampleQueryId="false">
        </table>
    </context>
</generatorConfiguration>

在pom文件中引入插件

<!--逆向工程插件  -->
			<plugin>
				<groupId>org.mybatis.generator</groupId>
				<artifactId>mybatis-generator-maven-plugin</artifactId>
				<version>1.3.2</version>
				<configuration>
					<verbose>true</verbose>
					<overwrite>true</overwrite>
				</configuration>
			</plugin>

用 命令执行即可  mvn mybatis-generator:generate

右键项目 ---->  Run as ---> Maven Build...  --->

即可生成实体,xml和dao接口前提你项目集成好maven

这三个文件是逆向工程生成的,

配置application.properties

# MYSQL 配置
spring.datasource.driverClassName=com.mysql.jdbc.Driver
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/sb?serverTimezone=GMT%2B8
spring.datasource.username=root
spring.datasource.password=1234
# sql文件的xml路径
mybatis.mapperLocations=classpath:mapper/*.xml
# 服务端口
server.port=8080

写一个简单的测试,向数据库中插入一条数据

App需要添加一个注解,表明扫描dao层的位置

启动项目,访问 localhost:8080/test/insert/username/小明/password/123456

页面返回成功,数据库插入信息成功

6.springboot的单元测试,查询刚刚插入的数据,pom文件引入测试依赖

 <!-- 测试类 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
        </dependency>

写一个测试方法,关键是这些注解

可以看出打印了结果,说明单元测试已经正确配置

7.springboot集成事务

在需要加入事务的类上加一个注解 @Transactional

8.全局异常捕获类,在类上加注解@ControllerAdvice,方法上加@ExceptionHandler,值为运行时异常,运行时出现异常则将被这个类捕获

9. 资源不存在时的异常不能被全局异常捕获,则需要配置一个错误页面,用到的lambda表达式

在写一个404.do的处理类

当输入一个不存在的路径时,就会被这个类处理

10.访问静态资源,在resources目录下新建一个文件夹,叫stati或者public,向里面放入一张jpg图片,然后浏览器

访问 localhost:8080/XXX.jpg,就能看到这个图片

11.支持jsp页面的集成

11.1  pom导入对jsp支持的依赖

<!--el表达式和jsp支持 -->
        <dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>jstl</artifactId>
        </dependency>
        <dependency>
            <groupId>org.apache.tomcat.embed</groupId>
            <artifactId>tomcat-embed-jasper</artifactId>
        </dependency>

11.2 application.properties文件加入视图解析器相关配置

#jsp页面前缀和后缀
spring.mvc.view.prefix=/WEB-INF/jsp/
spring.mvc.view.suffix=.jsp

11.3,由于这里是springboot项目,没有WEB-INF等相关目录,自己手动创建,红线内都是手动创建的,也可以在pom文件中指定<package>war</package>,会出现相应的目录结构,如果缺少目录还需要手动创建

最后写一个测试方法

访问后得到相关页面

12.集成 thymeleaf 模板引擎

12.1首先将pom文件中的对jsp支持的依赖注释掉,加入对thymeleaf 支持的依赖

<!-- 支持thymeleaf模板 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>

12.2 配置文件中增加一条配置 spring.thymeleaf.cache=false,关闭缓存

# 关闭模板缓存
spring.thymeleaf.cache=false

12.3,resources目录下创建一个 templates文件夹,将html文件放进去,写一个测试方法

浏览器访问

thymeleaf 模板引擎也集成好了,至于获取复杂对象则需要了解相关知识,这里不做演示

13  集成swagger,加入依赖

<!-- swagger 支持 -->
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger2</artifactId>
            <version>2.7.0</version>
        </dependency> 
        <dependency>
            <groupId>io.springfox</groupId>
            <artifactId>springfox-swagger-ui</artifactId>
            <version>2.7.0</version>
        </dependency>

  13.1  写一个配置类

13.2:写一个对应的,controller,

启动项目,浏览器输入 localhost:8080/swagger-ui.html

可以看到对应的方法,直接测试,输入参数,得到结果,swagger集成成功

14.日志集成 ,默认导入了lockback,pom文件不需要再导入其他依赖

配置文件加上日志级别

logging.level.root=INFO  :日志级别设置为info
logging.level.com.enjoy.controller=DEBUG:com.enjoy.controller这个包下的级别设置为debug
logging.file =F:/log/enjoy.log    日志输出到F:/log/enjoy.log 路径下

测试,在需要加日志的类上加入   private final Logger log = LoggerFactory.getLogger(UserController.class);引入的包是  org.slf4j.Logger,则调用  log.info("xxx");就会打印对应的日志

上面配置的默认的lookback日志,还有一种日志log4j2,需要排除lockback,在引入log4j2才能生效

,其他不用变,日志直接使用,同上面用法一样

15.AOP的日志应用,写一个切面类,设置参数,方法执行前后调用该类的方法,无需每个方法都做重复工作,简化开发

 <!-- aop支持 -->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-aop</artifactId>
        </dependency>

执行相关方法,会打印出相应的日志

16 打包部署

    16.1,打jar包,pom文件中需要添加几个插件

<!-- 编译级别 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-compiler-plugin</artifactId>
				<configuration>
					<source>1.8</source>
					<target>1.8</target>
				</configuration>
			</plugin>
		    <!-- 不配置会出现找不到主入口。Jar无法跑起来。 -->
			<plugin>
				<groupId>org.springframework.boot</groupId>
				<artifactId>spring-boot-maven-plugin</artifactId>
			</plugin>
			<!-- 打包跳过测试 -->
			<plugin>
				<groupId>org.apache.maven.plugins</groupId>
				<artifactId>maven-surefire-plugin</artifactId>
				<configuration>
					<skip>true</skip>
				</configuration>
			</plugin>

配置好以后,可以用eclipse的maven打包  右键项目——>Run As——>Maven clean先清理一下,再安装Run As——>maven install,提示成功以后,在项目的target目录下找到该项目的jar包文件,在这里打开命令窗口,输入 java -jar xxx.jar,即可启动项目

也可以用maven命令,在命令窗口手动打包,打包要在pom文件同级目录下打开命令窗口,mvn clean package命令打包,在target目录下能找到这个jar包,按上面步骤启动即可

打war包,需要在打jar包的基础上做两处修改

16.1:修改pom文件 将<package>jar</package>  改成<package>war</package>,更新一下

16.2:在App.class中修改主方法

public class App extends SpringBootServletInitializer{

    public static void main(String[] args) {
        SpringApplication.run(App.class, args);
    }

    @Override
    protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
        return builder.sources(App.class);
    }

需要继承SpringBootServletInitializer这个方法,重写configure方法,修改完按照上面的命令打包,就会打成war包

部署到tomcat9 中,将war包方在webapp下,启动,浏览器输入localhost:8080/项目名/路径,就可以访问了,如果不想输入项目名直接访问,需要将war包改成ROOT.war,放到webapp中,启动后直接访问就可以

猜你喜欢

转载自blog.csdn.net/csdnbeyoung/article/details/88824896