SpringBoot框架学习 Day2
SpringBoot
YML文件的语法及用法:
1.语法
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
- # 表示注释,从这个字符一直到行尾,都会被解析器忽略。
代码示例:
student: username: "我草了" password: "123" age: 80 --- spring: profiles: active: dev --- server: port: 8888 --- spring: profiles: dev --- spring: profiles:test ---
YML配置文件给对象注入值:
通过SpringBoot的自动加载配置文件的属性来进行这个操作,首先配置一个yml 在创建一个类上面打上@Component 标签 在在SpringBoot的配置类上面加上注解@SpringBootApplication 表示扫描全部
YML配置:
student: username: "我草了" password: "123" age: 80
类配置:
@Component public class Student { @Value("${student.username}") private String username = "普斯"; @Value("${student.password}") private String password = "我草"; @Value("${student.age}") private Integer age = 18;
YML文件支持多模块,可以给出多个端口 且方便你在多个环境中变换端口不用改变代码
代码示例:
--- spring: profiles: active: dev --- server: port: 8888 --- spring: profiles: dev --- spring: profiles:test --- #这里是第二个YML server: port: 9090
自动配置的原理:
1.SpringBoot启动的时候加载主配置类,开启了自动配置功能@EnableAutoConfiguration。
2.@EnableAutoConfiguration的作用是利用AutoConfigurationImportSelector给容器中导入一些组件。
3.通过protected List<String> getCandidateConfigurations(AnnotationMetadata metadata, AnnotationAttributes attributes)获取候选的配置,这个是扫描所有jar包类路径下"META-INF/spring.factories";
4.然后把扫描到的这些文件包装成Properties对象。
5.从properties中获取到EnableAutoConfiguration.class类名对应的值,然后把他们添加在容器中
6.整个过程就是将类路径下"META-INF/spring.factories"里面配置的所有EnableAutoConfiguration的值加入到容器中
7.每一个这样XXAutoConfiguration类都是容器中的一个组件都加入到容器中,用他们来做自动配置。
8.每一个自动配置类进行自动配置功能,以HttpEncodingAutoConfiguration为例解释自动配置原理。
//获取日志打印器 private Logger logger = LoggerFactory.getLogger(MyBean_Test.class);
@Test public void testlogger(){ logger.debug("debug");//第 logger.error("error");//打印最少的 logger.warn("warn"); logger.info("info");//第四 logger.trace("trace");//全部 } }
3.可以配置YML进行改变你需要的日志属性
logging.file = mylogging #生成日志文件文件名为mylogging
logging.file.max-size = 1KB#生成的日志文件最大容量为1KB
logging.level.cn.itsource.springboot = debug#打印模式为debug模式
4.日志的几种模式:
logger.debug("debug");//不同的模式打印获取的日志是不同的 logger.error("error"); logger.warn("warn"); logger.info("info"); logger.trace("trace");
5.xml配置日志:Springboot默认会在resources支援文件下面去找logback-spring.xml的日志配置文件 所以xml文件的名字是固定的
<?xml version="1.0" encoding="UTF-8"?> <configuration debug="true" scan="true" scanPeriod="1 seconds"> <!-- 日志格式 --> <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.itsource" level="info" additivity="false"> <appender-ref ref="stdout"/> <appender-ref ref="file"/> </logger> </configuration>
集成Thymeleaf:
1.导入依赖文件
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-thymeleaf</artifactId> </dependency>
2.创建模板 resources/templates/heelo.html
<!DOCTYPE html> <html lang="en" xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <h1>你好</h1> <h2><div th:text="${index}">这是显示欢迎信息</div></h2> </body> </html>
3.编写controller
@Controller public class Example { @RequestMapping("/inde") String home(Model model) { model.addAttribute("index", "哈哈哈"); return "heelo"; } }
4.static文件下面编写index默认的主页面:
<!DOCTYPE html> <html lang="en"> <script src="/webjars/jquery/3.4.1/jquery.js"></script> <head> <meta charset="UTF-8"> <title>Title</title> </head> <script> alert($) </script> <body> <h1>主页面欢迎你</h1> </body> </html>
5.Thymeleaf的自动配置原理:
@EnableAutoConfiguration 开启自动配置功能,通过一个AutoConfigurationImportSelector导入选择器去扫描 spring-boot-autoconfigure-2.0.5.RELEASE.jar 自动配置包下面的 spring.factories 文件中的很多很多的自动配置的类 而:ThymeleafAutoConfiguration 是的Thymeleaf的自动配置 ,在这个自动配置类里面通过一个ThymeleafProperties去读取配置文件中的配置(也有默认配置) ,来自动配置Thymeleaf,
静态资源:
1.导包
<dependency> <groupId>org.webjars</groupId> <artifactId>jquery</artifactId> <version>3.4.1</version> </dependency>
2.要使用JS的支援在html里面直接引入进行了
<script src="/webjars/jquery/3.4.1/jquery.js"></script>
集成DataSource(两种方式):
1.导入依赖的包
<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>
2.手动配置方式(了解):一般用自动配置的方式
yml配置:
jdbc: username: root password: 123456 url: jdbc:mysql:///ssm driver-class-name: com.mysql.jdbc.Driver
SpringBoot配置类注入Bean
@Bean @ConfigurationProperties(prefix = "jdbc") public DataSource dataSource(){ DruidDataSource dataSource = new DruidDataSource(); return dataSource ; }
3.自动配置:现在一般都流行使用自动配置
yml配置:
spring: datasource: username: root //数据库账号 password: 123456 //数据库密码 url: jdbc:mysql:///ssm driver-class-name: com.mysql.jdbc.Driver type: com.alibaba.druid.pool.DruidDataSource
集成Mybatis:
1.导入依赖(如果上面集成DataSource的时候导过了就不要重复导入)
<dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency>
2.配置yml:
mybatis: mapper-locations: classpath:cn/itsource/mapper/*Mapper.xml #这里配置的是你Mapper的xml路径
3.配置接口扫描包:在主配置类上面配置扫描mapper接口的注解
@MapperScan("mapper接口权限命名")
集成事务:
1.使用注解方式开启事务管理器:配置在SpringBoot的主配置类上面
@EnableTransactionManagement//开启事务扫描
2.开启事务扫描过后就可以在service层加入注解使用事务了
@Transactional
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.itsource.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.配置类上面导入配置文件
@ImportResource("classpath:applicationContext-service.xml")
1.导入依赖
<dependency> <groupId>com.github.pagehelper</groupId> <artifactId>pagehelper-spring-boot-starter</artifactId> <version>1.2.3</version> </dependency>
2.编写查询语句
<select id="selectPage" resultType="cn.itsource.web.controller.domain.Employee"> select id,username,realName from t_employee </select>
注意:用了pagehelper之后 ,查询总条数的sql不用写 , limit 不用写 , 如上:
3.查询的service
@Override public Page<Employee> selectPage() { PageHelper.startPage(1,5 ); Page<Employee> page = (Page<Employee>) employeeMapper.selectPage(); return page; }
PageHelper.startPage(1,5 ):设置当前页和每页条数
Page<Employee> :是pagehelper自己封装的页面对象,如同我们以前的PageList ,里面有总条数,列表,总页数等等
4.获取结果
Page<Employee> page = employeeService.selectPage(); System.out.println("总条数:"+page.getTotal()); for (Employee employee : page.getResult()) { System.out.println(employee); }