springboot快速详细配置搭建
前言
本文章只局限于springBoot的快速配置搭建,原理部分请阅读本人的另一篇原理剖析的文章,同时本文章会有一部分配置未写入:
1 本文章只介绍本人认为代码量最少的配置
2 有部分配置比较多,以文件形式放在项目中
如果朋友想看全部配置方式,欢迎下载本文章对应的测试项目查看
https://gitee.com/XiaoSa12138/springboot-basis.git
Spring boot 简介
Spring boot应用的构建
以后的工程都以idea为例,eclipse创建springboot应用,只需要正常的创建maven工程即可,只不过就是pom导入的包的区别
1 打开idea --> Create New Project
2 创建 spring Initializr 项目
3 选择jdk版本,建议1.8+,1.7也可以,如果idea是初始使用,需要指定jdk的存储路径(红线)
4 修改名称
5 选择spring boot的版本及项目需要集成的组件(本次不选择,后面逐个集成)
6 输入项目存储路径
7 修改maven配置(默认仓库到c盘)
8 spring boot项目构成(红框可删除)
9 修改springboot版本(使用1.5.x)
Springboot 初体验
1 导入web模块,修改pom
<dependency> <groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId>
</dependency>
2 创建controller
创建包
输入包名
创建controller
@Controller
public class HelloWorldController { @RequestMapping("helloworld") @ResponseBody public String helloWorld(){ return "HelloWorld"; }
}
构建结果详解
starter 场景启动器
spring boot 可集成的starter参考官网:
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#using-boot-starter
入口类和@SpringBootApplication注解
自动配置
配置文件
默认spring Initializr创建的配置文件是application.properties文件,你们应该已经很熟悉了,但是本次我们不介绍此格式,使用yml格式配置文件
1 YML格式
1-1 YML语法
1-2 YML常用写法
示例
网址:
https://docs.spring.io/spring-boot/docs/1.5.9.RELEASE/reference/htmlsingle/#using-boot-starter
2 配置文件值注入
2-1 读取properties配置文件
修改properties配置文件编码(中文会乱码)
Jdbc.java
/*** properties配置文件读取* @PropertySource 注解将配置文件导入到springContext中* @Component 注解将对象作文组件添加到springContext中* @ConfigurationProperties 中的 prefix 用来指明我们配置文件中需要注入信息的前缀* */
@ConfigurationProperties(prefix = "jdbc")
@PropertySource(value = {"classpath:pro1.properties"})
@Component public class Jdbc2 { private String url; private String name; private String password; //gets&sets
}
Pro1.properties
jdbc.url=localhost
jdbc.name=root
jdbc.password=123456
TestController.java
@Controller
public class TestController { @Autowired private Jdbc jdbc; @RequestMapping("pro1") @ResponseBody public String getPro1(){ String s = jdbc.getUrl()+ "==" + jdbc.getName() + "==" + jdbc.getPassword(); return s; }
}
2-2读取yml配置文件
System.java
/*** yml配置文件读取* @Component 注解将对象作文组件添加到springContext中* @ConfigurationProperties 中的 prefix 用来指明我们配置文件中需要注入信息的前缀*/
@Component
@ConfigurationProperties(prefix = "system")
public class System { private String name; private int id; private List<String> group; //sets&gets
}
application.yml
system:name: 我的系统id: 111group:- 登录系统- 主系统- 管理系统
TestController.java
@Controller
public class TestController { @Autowired private System system; @RequestMapping("pro3") @ResponseBody public String getPro3(){ String s = system.getName() + " " + system.getId() + " " + system.getGroup().get(0) + "" + system.getGroup().get(1); return s; }
}
3 自定义yml文件
名称格式为:application-my[my为自定义名称].yml
然后在主yml文件中引用即可
3 配置文件占位符
4 profile多环境支持
system:name: 我的系统id: 111
spring: profiles: include: system2
---
server:port: 8088
spring:profiles: ceshi
---
5 配置文件加载位置
我们可以将项目打包成jar包直接运行,同时在jar包旁边配置一个application,yml配置文件,此时会以外部配置文件为准,非常方便
system:group: - 外部登录系统- 外部主系统 - 管理系统
server:port: 8085
cmd运行:java -jar spring-boot…(省略)
日志配置
1 日志框架
2 默认配置
3 推荐日志配置
在我们的开发中,我们可以使用springboot默认的日志形式,在控制台打印即可
在测试及生产环境中,我们可以使用LogBack日志,此日志与springboot天然集成,只需要在classpath下创建一个名为logback.xml的配置文件,springboot就会自动读取
具体文件配置内容参见本文章码云项目files下logback.xml配置文件
web之模板引擎
1 Thymeleaf模板引擎
1-1 Thymeleaf场景启动器
<dependency><groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
修改Thymeleaf版本(springboot默认使用thymeleaf2.x版本,不太强大)
<thymeleaf.version>3.0.3.RELEASE</thymeleaf.version>
<thymeleaf-layout-dialect.version>2.1.2</thymeleaf-layout-dialect.version>
1-2测试
Thymeleaf.html
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head><meta charset="UTF-8"><title>thymeleaf模板测试</title>
</head>
<body><h1 th:text="${ name }" >测试</h1><h1>[[${type}]]</h1>
</body>
</html>
ThymeleafController.java
@Controller
public class ThymeleafController { @RequestMapping("/thy") public String test(Model m){ m.addAttribute("name","成功读取"); m.addAttribute("type","我是类型"); return "thymeleaf"; }
}
1-3必要配置(application.yml)
spring:thymeleaf:cache: false#关闭thymeleaf模板的缓存
1-4基本语法
内置对象具体配置内容参见参见本文章码云项目files下thymeleaf模板.yml配置文件
2 JSP模板引擎
2-1为内嵌Tomcat添加jsp支持(pom.xml)
<dependency><groupId>jstl</groupId><artifactId>jstl</artifactId><version>1.2</version>
</dependency>
<dependency><groupId>org.apache.tomcat.embed</groupId><artifactId>tomcat-embed-jasper</artifactId>
</dependency>
2-2 创建jsp存放目录
Webapp需要设置为源文件夹使其与resources文件夹同级
2-3 application.yml配置jsp映射路径
spring:mvc:view:prefix: /WEB-INF/ #jsp路径前缀suffix: .jsp #jsp路径后缀
2-4 测试
@Controller
public class JspController {@RequestMapping("/jsp")public String test(Model m){m.addAttribute("name","成功读取");m.addAttribute("type","我是类型");return "testJsp";}
}
错误处理
1 默认跳转页面(Thymeleaf模板)
5xx命名:匹配所有以5开头的状态码跳转页面
404命名:精确匹配状态码跳转页面
其中一个页面
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body> 来到404页面了<br/> [[${status}]]<br/> [[${exception}]]<br/> [[${timestamp}]]<br/> [[${errorStatus}]]<br/> [[${message}]]<br/>
</body>
</html>
2 自定义异常
2-1添加增强控制器(MyExceptionHandler)
@ControllerAdvice
public class MyExceptionHandler {//指定捕获的异常类型@ExceptionHandler(NullPointerException.class)public String nullPointerException(Exception e, HttpServletRequest request){//自定义异常信息并添加到请求域中Map<String,Object> map = new HashMap<String,Object>();map.put("errorStatus",true);map.put("message","空指针异常啦...");request.setAttribute("my-error-info",map);//设置异常状态码(必须)request.setAttribute("javax.servlet.error.status_code",404);return "forward:/error";}@ExceptionHandler(ArithmeticException.class)public String ArithmeticException(Exception e, HttpServletRequest request){//自定义异常信息并添加到请求域中Map<String,Object> map = new HashMap<String,Object>();map.put("errorStatus",true);map.put("message","除数为零啦...");request.setAttribute("my-error-info",map);//设置异常状态码(必须)request.setAttribute("javax.servlet.error.status_code",404);return "forward:/error";}}
2-2携带自定义的异常信息(MyErrorAttributes)
@Component
public class MyErrorAttributes extends DefaultErrorAttributes {@Overridepublic Map<String, Object> getErrorAttributes(RequestAttributes request, boolean includeStackTrace) {Map<String, Object> map = super.getErrorAttributes(request, includeStackTrace);//自定异常处理器携带的数据添加到返回的map中Map<String,Object> myMap = (Map<String,Object>) request.getAttribute("my-error-info", 0);map.putAll(myMap);return map;}
}
2-3测试
public class Person {private String name;private Integer age;//gets&sets
}
@Controller
public class ErrorController {private Person person = new Person();@RequestMapping("error1")public void test(){person.getAge().toString();}@RequestMapping("error2")public void test2(){int i = 1/0;}}
Servlet容器
1 注册三大组件
2 外部servlet容器
2-1内嵌式servlet容器设置
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-tomcat</artifactId><scope>provided</scope>
</dependency>
2-2打包方式为war
2-3设置servlet初始化器
public class SpringBootTestServletInitializer extends SpringBootServletInitializer{@Overrideprotected SpringApplicationBuilder configure(SpringApplicationBuilder application){//传入SpringBoot应用的主程序return application.sources(SpringBootTestApplication.class);}
}
数据整合
1 Druid数据源
1-1pom.xml
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope>
</dependency>
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.9</version>
</dependency>
1-2yml配置
spring:
datasource:type: com.alibaba.druid.pool.DruidDataSource #实例化数据库连接类url: jdbc:mysql://localhost:3306/springbottest?useUnicode=true&characterEncoding=utf-8#数据库连接路径username: root #数据库连接名password: admin #数据库连接密码driver-class-name: com.mysql.jdbc.Driver #数据库驱动max-idle: 10#最大的空闲连接max-wait: 1000#等待连接返回的最大等待时间,毫秒单位min-idle: 5#最小的空闲连接initial-size: 5#数据库初始连接timeBetweenEvictionRunsMillis: 60000#指定空闲连接检查、废弃连接清理、空闲连接池大小调整之间的操作时间间隔minEvictableIdleTimeMillis: 300000#空闲连接最少空闲多久后可被清除validationQuery: select 'x' #获取连接时连接校验的sql查询语句testWhileIdle: true#当连接空闲时,是否执行连接测试testOnBorrow: false#当从连接池借用连接时,是否测试该连接testOnReturn: true#在连接归还到连接池时是否测试该连接poolPreparedStatements: true#指定是否池化statementsmaxOpenPreparedStatements: 50#最大的打开的prepared statements数量
# 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙filters: stat,wall,log4jmaxPoolPreparedStatementPerConnectionSize: 20useGlobalDataSourceStat: trueconnectionProperties: druid.stat.mergeSql=true;druid.stat.slowSqlMillis=500
1-3初始化Druid数据源
@Configuration
public class DruidConfig {//手动添加Druid的配置项,否则springBoot不加载Druid独有配置,如初始连接,最大连接等@ConfigurationProperties(prefix = "spring.datasource")@Beanpublic DataSource druid(){return new DruidDataSource();}
}
1-4 配置druid数据源监控(可选)
在DruidConfig类中添加配置
/*** 配置Druid监控*///1.配置一个管理后台的sevlet@Beanpublic ServletRegistrationBean statViewServlet(){ServletRegistrationBean bean = new ServletRegistrationBean(new StatViewServlet(),"/druid/*");Map<String,String> initParams = new HashMap<String,String>();initParams.put("loginUsername", "admin");initParams.put("loginPassword", "123456");//设置ip白名单initParams.put("allow", "");//设置ip黑名单。deny优先级高于allowinitParams.put("deny", "192.168.10.125");bean.setInitParameters(initParams);return bean;}//2.配置一个web监控的filter@Beanpublic FilterRegistrationBean webStatFilter(){FilterRegistrationBean bean = new FilterRegistrationBean();bean.setFilter(new WebStatFilter());Map<String,String> initParams = new HashMap<String,String>();//忽略过滤的形式initParams.put("exclusions", "*.js,*.css,/druid/*");bean.setInitParameters(initParams);//设置过滤器过滤路径bean.setUrlPatterns(Arrays.asList("/*"));return bean;}
}
2 MyBatis
2-1 pom.xml
<dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>1.3.2</version>
</dependency>
2-2 yml配置
#MyBatis配置
mybatis:mapper-locations: classpath:mapping/*.xml #Mapper配置文件扫描路径type-aliases-package: cn.piesat.g_mybatis #pojo类别名包
2-3 数据库
CREATE DATABASE springboottest;CREATE TABLE person(
NAME VARCHAR(10),
age INT
)INSERT INTO person VALUES('张三',10);
INSERT INTO person VALUES('李四',10);
INSERT INTO person VALUES('王五',10);
INSERT INTO person VALUES('赵六',10);
2-4接口扫描配置
@MapperScan(value = {"cn.piesat.g_mybatis.mapping"})
@Configuration
public class MybatisConfig {
}
2-5 pojo类
public class Person {private String name;private Integer age;//gets&sets
}
2-6 mybatismapping.xml
<?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="cn.piesat.g_mybatis.mapping.MybatisMapper" ><resultMap id="BaseResultMap" type="cn.piesat.g_mybatis.Person" ><id column="name" property="name" jdbcType="VARCHAR" /><result column="age" property="age" jdbcType="INTEGER" /></resultMap><select id="select" resultMap="BaseResultMap" >select * from person</select>
</mapper>
2-7 MybatisMapper.java
public interface MybatisMapper {List<Person> select();
}
2-8 测试
@Controller
public class MybatisController {@Autowiredprivate MybatisMapper mapper;@RequestMapping("mybatis")@ResponseBodypublic List<Person> select(){return mapper.select();}
}
3 spring Data Jpa(可选)
3-1 概念
3-2 pom.xml
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
3-3 application.yml
spring:jpa:hibernate:ddl-auto: update #更新或者创建数据表结构show-sql: true#显示sql语句properties:hibernate:format_sql: true#格式化sql语句
3-4 实体类User.java
@Entity //告诉JPA这是一个实体类(和数据表映射的类)
@Table(name = "tb_user") //@Table来指定和哪个数据表对应;如果省略默认表名就是user;
public class User {@Id //这是一个主键@GeneratedValue(strategy = GenerationType.IDENTITY)//自增主键private Integer id;@Column(name = "last_name", length = 50) //这是和数据表对应的一个列private String lastName;@Column //省略默认列名就是属性名private String email;//gets&sets
}
3-5 UserRepository.java
/*** 继承JpaRepository来完成对数据库的操作* 泛型1:实体类 泛型2:主键类型*/
public interface UserRepository extends JpaRepository<User,Integer> {
}
3-6 测试
@RestController
public class JpaController {@Autowiredprivate UserRepository userRepository;@GetMapping("/user/{id}")public User getUser(@PathVariable("id") Integer id){return userRepository.findOne(id);}@GetMapping("/user")public User insertUser(User user){return userRepository.save(user);}}
至此,我们可以搭建一个简单的框架,当然只是满足项目的普遍需求,稍后会有多款技术与springBoot整合的文章发出,此文也许有错误之处或者更好的配置方式,愿大神指点!
springboot快速详细配置搭建相关推荐
- SpringBoot约定大于配置的特性解读 SpringBoot快速入门
SpringBoot约定大于配置 Spring官方网站本身使用Spring框架开发,随着功能以及业务逻辑的日益复杂,应用伴随着大量的XML配置文件以及复杂的Bean依赖关系.随着Spring 3.0的 ...
- SpringBoot快速搭建
文章目录 SpringBoot快速搭建 @SpringBootApplication @Configuration @EnableAutoConfiguration SpringFactoriesLo ...
- 第一章:基于 SpringBoot 快速搭建QQ机器人,并监听群事件
第一章:基于 SpringBoot 快速搭建QQ机器人 前言:知识与储备 这个QQ机器人能干什么? 第一步:搭建Maven项目环境 第二步:编写pom文件 第三步:编写启动类 第四步:创建配置文件 第 ...
- kafka的单机搭建与springboot快速集成
一.kakfa相关术语 Broker 消息中间件处理节点,一个Kafka节点就是一个broker,一个或者多个Broker可以组成一个Kafka集群 Topic Kafka根据topic对消息进行归类 ...
- db2 springboot 整合_[SpringBoot]快速配置多数据源(整合MyBatis)
前言 由于业务需求,需要同时在SpringBoot中配置两套数据源(连接两个数据库),要求能做到service层在调用各数据库表的mapper时能够自动切换数据源,也就是mapper自动访问正确的数据 ...
- springboot超级详细的日志配置(基于logback)
前言 java web 下有好几种日志框架,比如:logback,log4j,log4j2(slj4f 并不是一种日志框架,它相当于定义了规范,实现了这个规范的日志框架就能够用 slj4f 调用) ...
- web服务器常见配置搭建详解(超详细)
前言: 本博客借鉴一些写的比较好的博客,进行归纳总结,整理了一篇比较详细的服务器常见配置搭建教程 一来是和大家一起分享,二来也是作为自己的学习笔记记录一下. 温馨提示: 篇幅较长,请分阶段选择性查看. ...
- SpringBoot集成163邮件发送详细配置,从163邮箱开始配置
SpringBoot集成163邮件发送详细配置,从163邮箱开始配置 1.登录163邮箱 2.配置163邮箱 3.开始编写SpringBoot代码 1.创建SpringBoot项目然后引入依赖 2.编 ...
- springboot+dubbo+zookeeper+maven搭建微服务详细教程
前言: 本文将使用springboot+dubbo+zookeeper+maven搭建一套微服务. 需要提前在本地配置的环境: maven环境 zookeeper环境(在我本地zookeeper在21 ...
最新文章
- SubclassWindow和SubclassDlgItem
- mysql各种错误提示码和解决方法
- 策略梯度训练cartpole小游戏
- 走在技术前沿的 iOS 架构实现
- AddTransient、AddSingleton、AddScoped 三者都应该在什么场景下使用
- 写在囧男囧女们的七夕节
- [转]Java8 Lambda表达式教程
- SQL Server “复制”表结构,创建_Log表及触发器
- Jsp 【项目路径】
- nodeJS丶Buff使用及相关API
- 音频加速 foobar_如何使用Foobar2000将音频CD翻录到FLAC
- orientation
- 【活动】为中秋献上祝福
- python分割文本_切分文本Python
- #萌新日志#3.使用pix2pix CycleGAN和3d CycleGAN实现T1和T2加权模态的互转
- JavaScript知识之正则表达式(RegExp)
- 单纯性搜索算法 matlab函数,科学网—一种有效的最优化方法——Nelder-Mead单纯形直接搜索算法 - 王福昌的博文...
- 让bug无处藏身,Java 线上问题排查神器,你学废了吗?
- c#如何wmf图片转换成png图片_c# bmp图片转换成 wmf格式 实例
- 刚面完阿里蚂蚁金服的大数据工程师,有话说