目录
是什么
有什么优点、解决了哪些问题
创建第一个以springboot项目
starter
核心配置文件application.yml或properties
application中的配置项
springboot的启动流程
整合日志打印
整合druid数据源
处理异常
常用的注解
Configuration
Import
conditional
ConfigruationProperties
基于springboot的SSM框架
基于springboot的SSMibatisPlus框架
springboot项目的打包及运行
Spring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application development)成为领导者。-----摘自百度百科
小编的理解:
springboot是开发人员的福音,是所有通用框架的集大成者,这里举个生活中的例子说明一下:
用电器与插板的关系:
我理解springboot就像是一个大插板,能插各种类型的用电器(用电器就是各种框架与中间件等),如果我们不为每个用电器进行个性化定制,springboot为每个插口都进行了通用性设置(比如插口默认是220V、默认能插几孔的插头),让开发人员在开发项目的时候以最少的配置、最少的时间去构建项目。
此外,springcloud项目是基于springBoot扩展出来的概念,可以说没有springboot就没有springcloud,关于springboot的相关教程,后续小编会进行更新。
我们来看官网的描述:
官网给出的特征:
1. 直接嵌入Tomcat、Jetty或Undertow(无需部署WAR文件)
2. 提供有见解的“starter”依赖项以简化构建配置
3. 尽可能自动配置Spring和第三方库
4. 提供生产就绪功能,如指标、运行状况检查和外部化配置
5. 绝对没有代码生成,也不需要XML配置
小编的体验:
1. 简化开发流程,可以无xml配置快速搭建项目。
2. 简化开发流程,可以以starter快速导入项目所需要的依赖。
3. 简化打包与运维流程,内部嵌套服务器,可以直接打包运行,无需依赖外部的应用服务器。
4. 提供了配置类,可以与任何市面上流行的框架结合进行开发。
有两种方式可以搭建springboot项目:
1. 可以通过官网快速的搭建你的第一个springboot项目。
2. 可以通过idea快速搭建springboot项目,这里推荐idea创建的方式。
通过idea创建springboot项目:
1. 点击new-project,选择spring initializr,填写信息。
2. 选择springboot的版本和依赖项,点击finish完成。
3. 修改maven的地址,改为本地安装地址,file-settings-输入maven
4. 创建controller、service层以及代码,开始helloworld之旅。
controller代码:
@RestController public class HelloController { @Autowired HelloService helloService; @RequestMapping("hello") public String hello(){ return helloService.hello(); } }
service代码:
public interface HelloService { String hello(); }
service实现类代码:
@Service public class HelloServiceImpl implements HelloService { @Override public String hello() { return "Hello World!"; } }
5. 运行项目,在浏览器中访问接口。
6. 访问接口,这里我在application.properties中指定了项目的端口为8099
7. 访问接口信息如下:
在创建springboot项目的时候,我们勾选了依赖的项目,下面我们来看一下pom文件吧:
这个starter是什么呢?我们可以ctrl+鼠标左键点进去看看.....
可以看到,springboot的web-starter 依赖中直接引入了四个依赖,这可以大大节省我们去寻找各种框架的依赖和版本的时间,进行快速构建项目,而springboot提供的starter不仅仅只有web的,还有各种通用框架的,应有尽有,想想是不是就觉得很爽呢?
在springboot中,为我们提供了一个核心配置文件,就是application,你可以把它命名为application.properties,也可以吧它命名为application.yml或者application.yaml,三种命名方式都代表它是springboot的核心配置文件。
application中有一些常用的配置项,例如配置数据库信息的:
spring.datasource.driver-class-name= spring.datasource.url= spring.datasource.username= spring.datasource.password=
例如配置项目访问根路径的:
server.servlet.context-path=
例如配置项目的端口、访问路径:
server.port=8099 #配置完毕后,需要访问时加上此项 例如:原来是http://localhost:8080 #现在是http://localhost:8080/springboot01 server.servlet.context-path=/springboot01
更多配置内容可以访问地址获取(需要什么就ctrl+f搜索即可):
Common Application Properties
这里推荐博主文章:9千字长文带你了解SpringBoot启动过程--史上最详细 SpringBoot启动流程-图文并茂_Fly丶X的博客-CSDN博客_springboot启动流程
启动时输出的banner可以进行自定义:
在resources下新增banner.txt文件,输入文件内容,文件内容可以通过网站生成后粘贴到文件中: https://www.bootschool.net/ascii
直接在resources目录下增加文件logback.xml
%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n ${LOG_HOME}/server.%d{yyyy-MM-dd}.log 30 %d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{50} - %msg%n 10MB
导入druid的依赖
com.alibaba druid-spring-boot-starter1.1.10
在application.yml中新增配置信息:
spring: datasource: # 使用阿里的Druid连接池 type: com.alibaba.druid.pool.DruidDataSource driver-class-name: com.mysql.cj.jdbc.Driver # 填写你数据库的url、登录名、密码和数据库名 url: jdbc:mysql://127.0.0.1:3306/mydb?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai username: root password: root druid: # 连接池的配置信息 # 初始化大小,最小,最大 initial-size: 5 min-idle: 5 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 validationQuery: SELECT 1 testWhileIdle: true testOnBorrow: false testOnReturn: false # 打开PSCache,并且指定每个连接上PSCache的大小 poolPreparedStatements: true maxPoolPreparedStatementPerConnectionSize: 20 # 配置监控统计拦截的filters,去掉后监控界面sql无法统计,'wall'用于防火墙 filters: stat,wall,slf4j # 通过connectProperties属性来打开mergeSql功能;慢SQL记录 connectionProperties: druid.stat.mergeSql\=true;druid.stat.slowSqlMillis\=5000 # 配置DruidStatFilter web-stat-filter: enabled: true url-pattern: "/*" exclusions: "*.js,*.gif,*.jpg,*.bmp,*.png,*.css,*.ico,/druid/*" # 配置DruidStatViewServlet stat-view-servlet: url-pattern: "/druid/*" # IP白名单(没有配置或者为空,则允许所有访问) allow: 127.0.0.1,192.168.8.109 # IP黑名单 (存在共同时,deny优先于allow) deny: 192.168.1.188 # 禁用HTML页面上的“Reset All”功能 reset-enable: false # 登录名 login-username: admin # 登录密码 login-password: 123456
后台接口发生异常时,会出现空白页面的提示,非常不友好,这时可以使用springboot的异常处理来配置错误信息页面。
使用方式如下:
可以自定义异常处理类,指定哪些异常跳转到哪些页面
1. 新增Springboot的拦截器 :
@Component public class DemoInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { System.out.println("执行拦截器"); return true; } }
2. 配置拦截器
注意:类上有注解@Configuration。此类相当于SpringMVC配置文件。
addPathPattern(): 拦截哪些URL。 /** 拦截全部
excludePathPatterns(): 不拦截哪些URL。当和addPathPattern()冲突时,excludePathPatterns()生效。
@Configuration public class MyConfig implements WebMvcConfigurer { @Autowired private DemoInterceptor demoInterceptor; //配置拦截器的映射 @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(demoInterceptor).addPathPatterns("/**").excludePathPatterns("/login"); } }
@SrpingBootApplication:
启动类上的核心注解,它包含三个注解:
@Configuration
指定当前的类为springboot的配置类,可以在配置类中定义@Bean注解,注入bean对象,将bean对象交给springboot去管理。
Configuration(proxyBeanMethods=true)
proxyBeanMethods=true: 代表通过代理对象,依赖spring容器控制Bean的单例
proxyBeanMethods=false: 代表不会通过代理对象控制Bean的单例
@Import: 加在类上,通过此注解可以引入其他类。
@Conditional:满足了conditional中的条件则进行组件注入
@ImportResource: 允许我们定义xml配置文件,在文件中配置bean,用法如下:
读取配置文件中的内容,以对象的形式注入特定的类中
@ ConfigruationProperties
1. 创建项目,可参考章节:创建第一个以springboot项目
2. 导入依赖
org.slf4j slf4j-log4j121.6.1 org.mybatis.generator mybatis-generator-core1.3.2 com.github.pagehelper pagehelper-spring-boot-starter1.4.1
3. 配置application.yml
spring: datasource: driver-class-name: com.mysql.cj.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/test?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true thymeleaf: prefix: classpath:/templates/html/ suffix: .html cache: false model: HTML5 encoding: UTF-8 mybatis: type-aliases-package: com.ssm.mapper mapper-locations: classpath:com/ssm/mapper/*.xml configuration: log-impl: org.apache.ibatis.logging.stdout.StdOutImpl server: port: 8099
4. 新增文件generatorConfig.xml,需要修改文件中的路径。
5. 新增log4j.properties
log4j.rootLogger=debug,stdout log4j.appender.stdout=org.apache.log4j.ConsoleAppender log4j.appender.stdout.Target=System.err log4j.appender.stdout.layout=org.apache.log4j.SimpleLayout log4j.appender.logfile=org.apache.log4j.FileAppender log4j.appender.logfile.File=d:/lc.log log4j.appender.logfile.layout=org.apache.log4j.PatternLayout log4j.appender.logfile.layout.ConversionPattern=%d(yyyy-MM-dd HH:mm:ss)%1 %F %p %m%n
6. 在test包下新增java类:
import org.mybatis.generator.api.MyBatisGenerator; import org.mybatis.generator.config.Configuration; import org.mybatis.generator.config.xml.ConfigurationParser; import org.mybatis.generator.internal.DefaultShellCallback; import java.io.File; import java.util.ArrayList; import java.util.List; public class GeneratorCode { public void generator() throws Exception { Listwarnings = new ArrayList (); boolean overwrite = true; File configFile = new File("F:\\springbootall\\sp03\\ssm01\\target\\classes\\generatorConfig.xml"); ConfigurationParser cp = new ConfigurationParser(warnings); Configuration config = cp.parseConfiguration(configFile); DefaultShellCallback callback = new DefaultShellCallback(overwrite); MyBatisGenerator myBatisGenerator = new MyBatisGenerator(config, callback,warnings); myBatisGenerator.generate(null); } public static void main(String[] args) { GeneratorCode generatorSqlmap = new GeneratorCode(); try { generatorSqlmap.generator(); } catch (Exception e) { e.printStackTrace(); } } }
7. 运行java类就可以生成代码.
8. Controller类的代码如下:
@RequestMapping(value = "getAllGameUserList",method = RequestMethod.GET) public MapgetAllGameUsers( @RequestParam(value = "currentPage",required = false) int currentPage, @RequestParam(value = "pageSize",required = false) int pageSize, @RequestParam(value = "recordCount",required = false) int recordCount, @RequestParam(value = "usrLoginNm",required = false) String usrLoginNm, @RequestParam(value = "usrNm",required = false) String usrNm, @RequestParam(value = "usrCardNum",required = false) String usrCardNum, @RequestParam(value = "usrAddr",required = false) String usrAddr, @RequestParam(value = "usrBirDate",required = false) Date usrBirDate, @RequestParam(value = "usrHobby",required = false) String usrHobby, @RequestParam(value = "usrDetail",required = false) String usrDetail){ Gameuser gameuser=new Gameuser(); gameuser.setUsrLoginNm(usrLoginNm); gameuser.setUsrNm(usrNm); gameuser.setUsrCardNum(usrCardNum); gameuser.setUsrAddr(usrAddr); gameuser.setUsrBirDate(usrBirDate); gameuser.setUsrHobby(usrHobby); gameuser.setUsrDetail(usrDetail); logger.info("gameuser: "+gameuser.toString()); PageInfo gameuserPage = gameUserService.getAllGameUsers(currentPage, pageSize, recordCount, gameuser); Map objectMap=new HashMap<>(); objectMap.put("recordList",gameuserPage.getList()); objectMap.put("totalCount",gameuserPage.getTotal()); objectMap.put("currentPage",gameuserPage.getPageNum()); objectMap.put("pageSize",gameuserPage.getPageSize()); return objectMap; }
9. ServiceImpl代码如下:
@Override public PageInfogetAllGameUsers(int currentPage, int pageSize, int recordCount, Gameuser gameuser) { PageHelper.startPage(currentPage, pageSize); List allGameUserLists = gameuserMapper.getAllGameUserLists(gameuser); PageInfo gameuserPageInfo = new PageInfo<>(allGameUserLists); return gameuserPageInfo; }
10. Mapperxml代码如下:
详见我的另一篇博客:MybatisPlus详细教程,看后不会你打我............_只为code醉的博客-CSDN博客
通过maven-install命令,对项目进行打包操作,打包后的jar包存放在target目录下:
直接放置在装有JDK的机器上,执行命令:
java -jar jar包名称
即可运行项目。