SpringBoot初始

一、springboot基本概念

Spring Boot是其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。

二、springboot特点

2.1 为什么要使用springboot

它的出现解决了传统spring项目以下的问题:

  • ①配置负责繁多
    • 每一个组件集成spring都需要编写对应配置文件,比如appplicationContext-xxx.xml
  • ②混乱的依赖管理
    • 在spirng中想集成对应组件时,需要导入N多的pom,并且还有考虑版本。
      我们使用SpringBoot创建java应用,只需填写很少配置和依赖就能快速搭建,并使用java –jar 启动它,就能得到一个生产级别的web工程。非常方便。

2.2 springboot特点

  • 1.使用注解配置,无需xml(简单粗暴)
  • 2.快速搭建,开发
  • 3.简化的maven
  • 4.方便的和三方框架集成
  • 5.内嵌tomcat,部署简单
  • 6.内置健康检查,监控等
  • 7.自动配置,让配置更加简单

三、springboot–helloword

  • ①创建项目并导包
<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.0.5.RELEASE</version>
</parent>

<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • ②创建配置类
@SpringBootApplication
public class ApplicationConfig {
    public static void main(String[] args) {
        SpringApplication.run(ApplicationConfig.class);
    }
}
  • ③编写controller
@Controller
public class Example {
	@RequestMapping("/")
	@ResponseBody
	String home() {
		return "Hello World!";
	}
}
  • ④编写启动类
@SpringBootApplication
public class SpringbootmybaitsApplication {
	public static void main(String[] args) {
		SpringApplication.run(SpringbootmybaitsApplication.class, args);
	}
}
  • ⑤测试
    运行启动类
    http://localhost:8080/

四、springboot基本使用

4.1 springboot注解及包应用分析

  • spring-boot-starter-parent :SpringBoot的父工程,帮我们管理了很多的基础jar包
  • spring-boot-starter-web :SpringBoot和SpringMvc整合的jar包,并且导入了日志,tomcat,等等相关的jar包
  • RestController : Controller+ResponseBody
  • @EnableAutoConfiguration : 开启自动配置功能
  • SpringApplication.run : 启动SpringBoot应用
  • jar :SpringBoot应用默认打jar包
  • SpringBootApplication:包括三个标签组成
    @SpringBootConfiguration - @Configuration : Spring的配置标签
    @EnableAutoConfiguration :开启自动配置
    @ComponentScan :组件自动扫描

dependencyManagement:

该标签下的jar包,默认是不能被子项目直接使用的 , 他只有声明的功能 , 如果只项目想用这里标签里面的jar包 ,需要显示的写出来 ,而版本号使用父工程的。达到版本号统一管理的效果

dependencies:

这个标签下面的jar包默认会被子项目直接继承直接使用

4.2 springboot项目结构

myproject
 +-src
    +- main
         +- java
              +- com.example.myproject
                    +- comm
                    +- model
                    +- repository
                    +- service
                    +- web
                    +- Application.java
         +- resources
              +- static									//静态资源目录
              +- templates								//模板页面目录,如:jsp ,ftl
              +- application.properties/application.yml	//默认配置文件
    +- test
 +-pom.xml

4.3 打包独立运行

  • ①导包-打包插件
<build>
  <plugins>
    <plugin>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-maven-plugin</artifactId>
    </plugin>
  </plugins>
</build>
  • ②打包
    打包
  • 运行
    当前项目target目录运行cmd输入
    java -jar xxx.jar
    

4.4 springboot读取配置

4.4.1 使用@value标签

  • yml配置文件
    user:
      username: ls
      password: 456
      age: 99
    
  • 绑定配置对象
    @Component
    public class User {
        //@Value :从配置文件中取值   SPEL
        @Value("${user.username}")
        private String username = "zs";
        @Value("${user.password}")
        private String password = "123";
        @Value("${user.age}")
        private int age = 18;
        . . . . . . 
     }
    

4.4.2 使用@ConfigurationProperties标签

@ConfigurationProperties : 自动的根据前缀从配置中过滤出配置项目,然后根据当前对象的列名进行匹配,自动赋值

  • yml配置文件
    employee:
      username: ls
      password: 456
      age: 99
    
  • 绑定配置对象
    @Component
    @ConfigurationProperties(prefix = "employee")
    public class Employee {
        private String username = "zs";
        private String password = "123";
        private int age = 18;
    }    
    

4.5 多环境配置与切换

  • 方式一:
    spring:
      profiles:
        active: test	#激活(选择)环境test
    ---
    spring:
      profiles: dev		#指定环境名字dev
    server:
      port: 9999
    ---
    spring:
      profiles: test	#指定环境名字test
    server:
      port: 8888
    
  • 方式二:通过配置文件的名字识别环境
    application-dev.yml
    server:
      port: 9999
    
    application-test.yml
    server:
      port: 8888
    
    application.yml
    spring:
    	profiles:
    		active: test 
    		#根据文件名字配置 application-dev.properties
    

4.6 日志使用

  • 指定配置文件配置logback-spring.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <configuration>
        <!-- 定义常量 : 日志格式 -->
        <property name="CONSOLE_LOG_PATTERN" value="%d{yyyy-MM-dd HH:mm:ss.SSS} ----> [%thread] ---> %-5level %logger{50} - %msg%n"/>
    
        <!--ConsoleAppender 用于在屏幕上输出日志-->
        <appender name="stdout" class="ch.qos.logback.core.ConsoleAppender">
            <!--定义控制台输出格式-->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--打印到文件-->
        <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
            <file>logs/springboot.log</file>
            <rollingPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedRollingPolicy">
                <fileNamePattern>logs/springboot-%d{yyyyMMdd}-%i.log.gz</fileNamePattern>
                <maxFileSize>1KB</maxFileSize>
                <maxHistory>30</maxHistory>
                <!--总上限大小-->
                <totalSizeCap>5GB</totalSizeCap>
            </rollingPolicy>
            <!--定义控制台输出格式-->
            <encoder>
                <pattern>${CONSOLE_LOG_PATTERN}</pattern>
                <!-- 设置字符集 -->
                <charset>UTF-8</charset>
            </encoder>
        </appender>
    
        <!--root是默认的logger 这里设定输出级别是debug-->
        <root level="info">
            <!--定义了两个appender,日志会通过往这两个appender里面写-->
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </root>
    
        <!--如果没有设置 additivity="false" ,就会导致一条日志在控制台输出两次的情况-->
        <!--additivity表示要不要使用rootLogger配置的appender进行输出-->
        <logger name="cn.xxx" level="error" additivity="false">
            <appender-ref ref="stdout"/>
            <appender-ref ref="file"/>
        </logger>
    
    </configuration>
    
  • 使用

    • 也可以使用lombok中的@Slf4j标签简化下面代码
      lombok简介及用法
      https://blog.csdn.net/ThinkWon/article/details/101392808
    private Logger logger = LoggerFactory.getLogger(MySpringBootTest.class);
    ...
    logger.error("我是一个error日志.....");
    logger.warn("我是一个warn日志.....");
    logger.info("我是一个info日志.....");
    logger.debug("我是一个debug日志.....");
    logger.trace("我是一个trace日志.....");
    

五、springboot集成Thymeleaf模板引擎

5.1 Thymeleaf概念

  • java模板引擎,能够处理HTML,XML,JavaScript,CSS甚至是纯文本。类似于JSP和Freemarker
  • 作用就是把各个用户的公用的东西(页面)做一个提取,然后再根据不同的数据对页面进行渲染
  • 自然模板,原型即页面。
  • 语法优雅易懂,支持这两种OGNL,SpringEL编码方式
  • 遵循Web的标准,支持HTML5

5.2 集成Thymeleaf

  • ①导入依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-thymeleaf</artifactId>
</dependency>
  • ②创建模板 resources/templates/hello.html
<html lang="en" xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1>成功!</h1>
    <!--使用语法th:text 将div里面的文本内容设置为 -->
    <div th:text="${msg}">这是显示欢迎信息</div>
</body>
</html>
  • ③编写controller
@Controller
public class HelloController {
    @RequestMapping("/index")
    public String hello(Model model){
        model.addAttribute("msg","后面有人" );
        return "hello";
    }
}
  • ④编写主配置类
  • ⑤测试:启动项目浏览器访问:网页显示msg值

5.3 Thymeleaf自动配置原理

  • @EnableAutoConfiguration 开启自动配置功能,通过一个AutoConfigurationImportSelector导入选择器去扫描 spring-boot-autoconfigure-2.0.5.RELEASE.jar 自动配置包下面的 spring.factories 文件中的很多很多的自动配置的类
  • 而:ThymeleafAutoConfiguration 是的Thymeleaf的自动配置 ,在这个自动配置类里面通过一个ThymeleafProperties去读取配置文件中的配置(也有默认配置) ,来自动配置Thymeleaf,比如Thymeleaf的视图解析器的自动配置如下:
@Bean
@ConditionalOnMissingBean(name = "thymeleafViewResolver")
public ThymeleafViewResolver thymeleafViewResolver() {
	ThymeleafViewResolver resolver = new ThymeleafViewResolver();
	...
	return resolver;
}

六、SpringBoot中的MVC配置

①配置拦截器

  • 定义拦截器
@Component
public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle................:"+request.getRequestURI());
        return super.preHandle(request, response, handler);
    }
}
  • 注册拦截器
@SpringBootApplication
public class ApplicationConfig implements WebMvcConfigurer {

    @Autowired
    private MyHandlerInterceptor myHandlerInterceptor;
    /**
     * 注册拦截器
     * @param registry :拦截器的注册器
     */
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(myHandlerInterceptor).addPathPatterns("/**").excludePathPatterns("/login");
    }

②添加视图控制器

@Override
public void addViewControllers(ViewControllerRegistry registry) {
    registry.addViewController("/xx").setViewName("hello2.html");
}

当访问/xx 定位到 templates/hello2.html

七、springboot集成DataSource

  • 导入依赖
<!-- https://mvnrepository.com/artifact/com.alibaba/druid -->
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>druid</artifactId>
    <version>1.1.20</version>
</dependency>
<!-- mysql 数据库驱动. -->
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
</dependency>
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
  • 配置属性
    • 手动配置
    jdbc:
        username: root
        password: 123456
        url: jdbc:mysql:///ssm
        driver-class-name: com.mysql.jdbc.Driver
    
    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        DruidDataSource dataSource = new DruidDataSource();
        return dataSource ;
    }
    
    • 自动配置
    spring:
      datasource:
    	  	username: root
    	    password: 123456
    	    url: jdbc:mysql:///ssm
    	    driver-class-name: com.mysql.jdbc.Driver
    	    type: com.alibaba.druid.pool.DruidDataSource
    

八、springboot集成MyBaits

  • 导包
<dependency>
    <groupId>org.mybatis.spring.boot</groupId>
    <artifactId>mybatis-spring-boot-starter</artifactId>
    <version>1.1.1</version>
</dependency>
  • yml配置mybaits
mybatis:
	mapper-locations: classpath:cn/xxx/mapper/*Mapper.xml
  • 配置Mapper接口扫描包
@SpringBootApplication
@MapperScan("cn.xxx.web.controller.mapper")
public class ApplicationConfig {
   ...
}

九、PageHelper插件的使用

  • 导包
<dependency>
    <groupId>com.github.pagehelper</groupId>
    <artifactId>pagehelper-spring-boot-starter</artifactId>
    <version>1.2.3</version>
</dependency>
  • 编写查询语句
<--用了pagehelper之后 ,查询总条数的sql不用写  limit 不用写-->
<select id="selectPage" resultType="cn.xxx.web.controller.domain.Employee">
	select id,username,realName from t_employee
</select>
  • 编写查询的service
@Override
public Page<Employee> selectPage() {
    PageHelper.startPage(1,5 );
    Page<Employee> page = (Page<Employee>) employeeMapper.selectPage();
    return  page;
}
  • 获取结果
 Page<Employee> page = employeeService.selectPage();
 System.out.println("总条数:"+page.getTotal());
 for (Employee employee : page.getResult()) {
 	System.out.println(employee);
 }

springboot集成事务

  • 使用注解方式
    开启事务管理器
@SpringBootApplication
@MapperScan("cn.xxx.web.controller.mapper")
//@EnableTransactionManagement:开启事务管理器 用此注解就不用配置xml
@EnableTransactionManagement
public class ApplicationConfig{
...}

在service层打上标签

//事务注解
@Transactional
@Service
public class EmployeeServiceImpl{
...}
  • 使用xml方式
    1、导依赖
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-aop</artifactId>
</dependency>

2、配置事务xml

<!-- 配置事物管理器 -->
    <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>

    <aop:config>
        <aop:pointcut expression="execution(* cn.xxx.web.controller.service..*.*(..))" id="coreServicePointcut"/>
        <aop:advisor advice-ref="txAdvice" pointcut-ref="coreServicePointcut"/>
    </aop:config>

    <!-- aop应用事务管理 -->
    <tx:advice id="txAdvice" transaction-manager="transactionManager">
        <tx:attributes>
            <tx:method name="select*" read-only="true"/>
            <tx:method name="*" propagation="REQUIRED" />
        </tx:attributes>
    </tx:advice>

3、导入xml配置

@SpringBootApplication
//@ImportResource:导入一个xml配置文件
@ImportResource("classpath:applicationContext.xml")
public class SpringbootmybaitsApplication{
...}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值