SpringBoot创建和使用
Posted 啵啵虎的抽抽
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了SpringBoot创建和使用相关的知识,希望对你有一定的参考价值。
目录
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
什么是SpringBoot
Spring Boot是一种全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
SpringBoot的优点
1、快速集成框架,Spring Boot提供了启动添加依赖的功能,用于秒级集成各种框架;
2、内置运行容器,无需配置Tomcat等 Web容器,直接运行和部署程序;
3、快速部署项目,无需外部容器即可启动并运行项目;
4、可以完全抛弃繁琐的XML,使用注解和配置的方式进行开发;
5、支持更多的监控的指标,可以更好的了解项目的运行情况。
SpringBoot项目的创建
1、使用idea创建
如果使用的是idea社区版,则需要安装Spring Boot Helper插件
2、项目目录介绍和运行
Spring Boot目录介绍
一个简单的Spring Boot代码实现:
@Controller //控制器
@ResponseBody //返回的是数据,而非页面
public class TestController
@RequestMapping("/hi") //url路由注册
public String sayHi(String name)
//为空为null,默认值处理
if (!StringUtils.hasLength(name))
name="baekhyun";
return "你好:"+name;
@SpringBootApplication
public class DemoApplication
public static void main(String[] args)
SpringApplication.run(DemoApplication.class, args);
运行时,先找到Spring Boot启动类(@SpringBootApplication),运行启动类中的main方法
然后在网页上访问localhost:8080/hihttp://localhost:8080/hi
Spring Boot配置文件
1、配置文件
1.1、系统使用的配置文件(系统配置文件),如端口号的设置、连接数据库的配置
1.2、用户自定义配置文件
2、配置文件的格式
2.1、properies
server.port=8888
2.2、yml
server:
port: 8888
说明:
1、当一个项目中存在两种格式的配置文件,并且两个配置文件中设置了相同的配置项,但值不同时,那么properties的优先级更高
2、通常情况下一个项目中只会存在一种格式的配置文件
3、properties
3.1、properties基本语法
是以键值的形式配置的,key=value
#端口号设置
server.port=8888 #系统设置
myname=baekhyun #自定义
3.2、读取配置文件
使用@Value读
@Value("$myname")
private String myname;
@RequestMapping("/getconfig")
public String getConfig()
return myname;
#端口号设置
server.port=8888 #系统设置
myname=边伯贤 #自定义
3.3、缺点
配置文件中会有很多冗余的信息
#连接数据库配置
spring.datasource.url=jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
spring.datasource.username=root
spring.datasource.password=root
4、yml
4.1、优点
yml是一个可读性高,写法简单、易于理解,它的语法和JSON语言类似;yml支持更多的数据类型,它可以简单表达清单(数组)、散列表,标量等数据形态。它使用空白符号缩进和大量依赖外观的特色,特别适合用来表达或编辑数据结构、各种配置文件等;yml支持更多的编程语言,它不止是Java中可以使用在Golang、php、Python、Ruby、javascript、Perl中。
4.2、yml基本语法
key: value(value前面有一个空格)
server:
port: 6666
#自定义配置项
myname2: baekhyun
配置数据库连接
#配置数据库连接
spring:
datasource:
url: jdbc:mysql://127.0.0.1:3306/testdb?characterEncoding=utf8
username: root
password: root
4.3、yml配置数据类型
转义字符
#字符串
myString: 你好,\\n伯贤
myString1: '你好,\\n伯贤'
myString2: "你好,\\n伯贤"
@Value("$myString")
private String myString;
@Value("$myString1")
private String myString1;
@Value("$myString2")
private String myString2;
@PostConstruct
public void postConstruct()
System.out.println("myString"+myString);
System.out.println("myString1"+myString1);
System.out.println("myString2"+myString2);
4.4、yml配置对象
使用@ConfigurationProperties读取对象
#自定义对象
star:
id: 04
name: d.o.
age: 29
@Component
@ConfigurationProperties("star")
@Data
public class Star
private int id;
private String name;
private int age;
@Autowired
private Star star;
@PostConstruct
public void postConstruct()
System.out.println(star);
5、properties和yml
5.1、properties是以key=value 的形式配置的键值类型的配置文件,而yml使用的是类似json格式的树形配置方式进行配置的,yml层级之间使用换行缩进的方式配置,key和value 之间使用“:”英文冒号加空格的方式设置,并且空格不可省略;
5.2、properties为早期并且默认的配置文件格式,但其配置存在一定的冗余数据,使用yml可以很好的解决数据冗余的问题;
5.3、yml通用性更好,支持更多语言;
5.4、yml支持更多的数据类型。
6、设置不同环境的配置文件
SpringBoot日志文件
1、日志的功能
1.1、发现和定位问题;
1.2、记录用户登录日志,方便分析用户是正常登录还是恶意破解用户;
1.3、记录系统的操作日志,方便数据恢复和定位操作;
1.4、记录程序的运行时间,方便为以后优化程序提供数据支持
2、SpringBoot使用日志
2.1、先得到日志对象
private static final Logger logger= LoggerFactory.getLogger(UserController.class);
2.2、使用日志对象来打印日志(使用日志对象提供的内置方法打印)
@RequestMapping("/user")
@Controller
@ResponseBody //用来设置当前类中所有的方法返回的是数据而非页面
public class UserController
//1、得到日志对象
private static final Logger logger= LoggerFactory.getLogger(UserController.class);
@RequestMapping("/hi")
public String sayHi()
//写日志
logger.trace("我是trace");
logger.debug("我是debug");
logger.info("我是info");
logger.warn("我是warn");
logger.error("我是error");
return "hi,Spring Boot";
常见的日志框架说明
3、日志级别
3.1、作用
1、快速筛选重要的日志;
2、不同环境实现不同的日志级别的设置
3.2、日志级别
trace:微量,少许的意思,级别最低;
debug:需要调试时候的关键信息打印;
info:普通的打印信息(默认日志级别);
warn:警告,不影响使用,但需要注意的问题;
error:错误信息,级别较高的错误日志信息;
fatal:致命的,因为代码异常导致程序退出执行的事件。
日志级别规则:
当程序中设置了日志级别之后,那么程序只会打印和设置级别相同和大于当前日志级别的日志,小于当前级别的日志不会输出
3.3、日志级别的设置
#设置日志级别
logging:
level:
root: debug
根据不同的目录设置不同的日志级别:
#设置日志级别
logging:
level:
root: error
com:
example:
demo:
controller: trace
service: info
System.out.println相对于日志框架的缺点:
1、打印的信息不全(没有打印日志的时间、没有打印日志的来源);
2、不能实现日志打印的隐藏和显示;
3、System.out.println打印的日志不能被持久化
4、日志持久化
4.1、设置日志的保存目录
logging:
file:
path: d:\\\\loggings
4.2、设置日志保存文件名
logging:
file:
name: springlog.log
5、更简单的日志输出-lombok
由于LoggerFactory.getLogger(xxx.class)太繁琐,使用lombok来进行更简单的输出:
1、添加lombok框架支持;
2、使用@slf4j注解输出日志
5.1、添加lombok依赖
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController
//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);
@RequestMapping("/hi")
public String sayHi()
log.trace("我是slf4j的trace");
log.debug("我是slf4j的debug");
log.info("我是slf4j的info");
return "hi,art";
旧项目添加新依赖框架
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<optional>true</optional>
</dependency>
5.2、使用@slf4j注解输出日志
@Controller
@ResponseBody
@RequestMapping("/art")
@Slf4j
public class ArticleController
//private static final Logger logger= LoggerFactory.getLogger(ArticleController.class);
@RequestMapping("/hi")
public String sayHi()
log.trace("我是slf4j的trace");
log.debug("我是slf4j的debug");
log.info("我是slf4j的info");
return "hi,art";
5.3、lombok原理
Lombok 的原理是通过AspectJ (一种对Java的面向切面(AOP)的编程方案)将注解转换为代码。Lombok根据注解的类型在源代码中添加或替换方法,以便在编译时将注解嵌入源代码中。
java程序的运行原理:
lombok的作用
5.4、lombok的注解说明
注解 | 说明 |
@NoArgsConstructor/@AllArgsConstructor | 该类产生无参的构造方法和包含所有参数的构造方法 |
@RequiredArgsConstructor | 将类中所有带有@NonNull注解 / org.jetbrains.annotations.NotNull注解 的或者带有final修饰的成员变量 生成对应的构造方法 |
@Getter/@Setter | 用在成员变量上面或者类上面,相当于为成员变量生成对应的get和set方法,同时还可以为生成的方法指定访问修饰符,默认为public |
@Data | 效果等同于 @Getter + @Setter + @ToString + @EqualsAndHashCode + @RequiredArgsConstructor |
@Builder | 标注@Builder的类, 会在类内部生成一个内部类,用于生成值对象 |
@Accessors | 要搭配@Getter与@Setter使用,用来修改默认的setter与getter方法的形式 |
@NonNull | 属性不能为null |
@ToString | 自动添加toString方法 |
@EqualsAndHashCode | 自动添加equals和hashCode方法 |
@RequiredArgsConstructor | 自动添加必须属性的构造方法,包括含@NotNull注解的字段;final修饰且未初始化的字 |
SpringMVC 项目中 创建SpringBoot,使用Hibernate和JPA
起因:
老项目是SpringMVC,为了之后能使用更方便的SpringBoot。
所以在其中添加了SpringBoot项目,
但是老项目SpringMVC使用的Hibernate,SpringBoot希望使用JPA
解决方案:
一 POM
说明:
1 spring boot标签中,是需要添加的架包
由于我的发布方式是tomcat,所以需要打包时过滤springboot中的tomcat
2 build标签中,是打包方式。这里可以不看
3 这里有一个jpa版本的问题。
由于之前使用的jpa版本很低。这导致和springboot2.7.2版本的jpa版本不匹配。
其中,jpa2.7.2版本的findOne方法没有了,改为了findById。
这导致调用基础dao的方法会报错:NoSuchMethod。
所以下面也提供了JPA的架包导入方式。如果JPA版本是匹配的,那直接使用下面注释的
spring-boot-starter-data-jpa
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.5.14.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.kintech</groupId>
<packaging>war</packaging>
<artifactId>kintech.webInvoice</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>kintech.webInvoice</name>
<description>kintech.webInvoice</description>
<properties>
<java.version>1.8</java.version>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<spring-boot.version>2.1.1.RELEASE</spring-boot.version>
<fastjson.version>2.0.10</fastjson.version>
<spring-cloud.version>2021.0.3</spring-cloud.version>
</properties>
<dependencies>
<!-- srping boot begin-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<exclusions>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-tomcat</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>javax.servlet-api</artifactId>
<scope>provided</scope>
</dependency>
<!-- srping boot end-->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
<!--<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
-->
<!-- JPA -->
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>5.4.12.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>5.4.12.Final</version>
</dependency>
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-ehcache</artifactId>
<version>5.4.12.Final</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-commons</artifactId>
<version>1.13.13.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-jpa</artifactId>
<version>1.11.13.RELEASE</version>
</dependency>
<!-- JPA -->
<!-- kintech begin-->
<dependency>
<groupId>com.kintech</groupId>
<artifactId>kintech.web</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<dependency>
<groupId>com.kintech</groupId>
<artifactId>kintech.common</artifactId>
<version>0.0.1-SNAPSHOT</version>
<exclusions>
<exclusion>
<groupId>redis.clients</groupId>
<artifactId>jedis</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-redis</artifactId>
</exclusion>
<exclusion>
<groupId>org.springframework.session</groupId>
<artifactId>spring-session</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.commons</groupId>
<artifactId>commons-pool2</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>com.kintech</groupId>
<artifactId>kintech.service</artifactId>
<version>0.0.1-SNAPSHOT</version>
</dependency>
<!-- kintech end-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>$fastjson.version</version>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.18.24</version>
</dependency>
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.9</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>$spring-cloud.version</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<finalName>$project.name</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.0.0</version>
<configuration>
<descriptors>
<descriptor>src/main/assembly/assembly.xml</descriptor>
<!--对应在src/main/resource包下创建buildzip.xml配置文件-->
</descriptors>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<skip>true</skip>
<!-- <skipTests>true</skipTests> -->
</configuration>
</plugin>
</plugins>
</build>
</project>
二 引入springMVC中的applicationContext.xml
1 先看一下springmvc中的xml
将其拷贝到springboot中的resources下
2 application.yml (springboot)
添加如下:
spring:
main:
allow-bean-definition-overriding: true
三 启动类
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.ImportResource;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
//过滤hibernate jpa的自动加载
@SpringBootApplication(exclude = HibernateJpaAutoConfiguration.class)
//扫描包
@ComponentScan(basePackages="com.kintech",lazyInit=true)
//扫描jpa的dao
@EnableJpaRepositories(basePackages = "com.kintech.dao.jpa")
//扫描jpa 用到的entity
@EntityScan("com.kintech.model.domain")
//导入springmvc的applicationContext.xml
@ImportResource("classpath:spring/applicationContext.xml")
public class WebInvoiceApplication
public static void main(String[] args)
SpringApplication.run(WebInvoiceApplication.class, args);
以上是关于SpringBoot创建和使用的主要内容,如果未能解决你的问题,请参考以下文章