一、springboot的引言
Spring Boot 是由Pivotal 团队提供的全新框架.
目的:
简化新Spring 应用的初始搭建以及开发过程。
该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。
springboot= spring+ springmvc
二、springboot特点
创建独立的Spring应用 。 内嵌的tomcat,所以不需要再次部署。 简化maven配置 。 自动配置 。
注意:
java配置@Confirguation 注解加在类上,表示当前类为配置类
@bean 加在方法上表示当前方法返回值是需要交由工厂管理的对象,方法名就是对象的名字。
三 springboot的两种环境搭建形式
src/ main/ java
com. sanxia
entity
dao
service
Application . java 必须放置在主包内和子包同级
src/ main/ resources
application. yml
application. yaml
application. properties
配置文件放置在resources目录, 名字必须叫application
src/ test/ java
src/ test/ resources
3.1 maven形式搭建
3.1.1 引入依赖
< ! -- 继承springboot的父项目-- >
< parent>
< groupId> org. springframework. boot< / groupId>
< artifactId> spring- boot- starter- parent< / artifactId>
< version> 1.5 .7 . RELEASE< / version>
< / parent>
< dependencies>
< ! -- 引入springboot的web支持-- >
< dependency>
< groupId> org. springframework. boot< / groupId>
< artifactId> spring- boot- starter- web< / artifactId>
< / dependency>
< dependency>
< groupId> org. springframework. boot< / groupId>
< artifactId> spring- boot- starter- test< / artifactId>
< / dependency>
< / dependencies>
3.1.2 创建入口类
@SpringBootApplication
@MapperScan ( basePackages= "com.cms.dao" )
public class Application {
public static void main ( String [ ] args) {
SpringApplication . run ( Application . class , args) ;
}
}
3.1.3 写配置文件
server:
port: 8092
context- path: / springboot
3.1.4 测试
@RestController
@RequestMapping ( "/test" )
public class UserController {
@RequestMapping ( "/test" )
public String test ( ) {
return "hello springboot" ;
}
}
3.1.5 测试类书写
@SpringBootTest ( classes = Application . class )
@RunWith ( SpringRunner . class )
public class testAll {
@Autowired
private UserService userService;
@Test
public void test1 ( ) {
List < User > users = userService. queryAll ( ) ;
for ( User user : users) {
System . out. println ( user) ;
}
}
}
3.2 .springboot使用插件进行环境搭建
3.2.1 选择插件
3.2.2 勾选必要依赖
3.23 修改springboot的版本号
四 相关注解
4.1 SpringbootApplication
@SpringBootApplication
@MapperScan ( basePackages = "com.baizhi.dao" )
* 组合注解:一个注解包含多个注解的功能
* @SpringBootApplication = @Configuration + @ComponentScan + @EnableAutoConfiguration
*
* @Configuration :加在类上声明当前类 为配置类
* @ComponentScan :组件扫描, 将扫描到的类交由工厂管理
* @Repository
@Component
@Service
@Controller
@EnableAutoConfiguration :开启自动配置,一旦引入第三方的jar,springboot就可以帮你配制相关组件
@ComponentScan ( basePackages = "com.baizhi.*" )
@Configuration
@EnableAutoConfiguration
4.2 RestController
五 springboot和mybatis集成
5.1 导入依赖
< ! -- mybatis相关jar springboot和mybatis的整合jar封装了mybatis-- >
< dependency>
< groupId> org. mybatis. spring. boot< / groupId>
< artifactId> mybatis- spring- boot- starter< / artifactId>
< version> 1.3 .3 < / version>
< / dependency>
< ! -- mysql的驱动-- >
< dependency>
< groupId> mysql< / groupId>
< artifactId> mysql- connector- java< / artifactId>
< version> 5.1 .38 < / version>
< / dependency>
< ! -- https: / / mvnrepository. com/ artifact/ com. alibaba/ druid -- >
< ! -- 阿里数据源-- >
< dependency>
< groupId> com. alibaba< / groupId>
< artifactId> druid< / artifactId>
< version> 1.1 .16 < / version>
< / dependency>
5.2 配置文件配置
#数据源类型 以及参数
spring:
datasource:
url: jdbc: mysql: / / localhost: 3306 / springboot
driver- class - name: com. mysql. jdbc. Driver
username: root
password: root
type: com. alibaba. druid. pool. DruidDataSource
#mybatis相关配置 别名 mapper位置
mybatis:
type- aliases- package : com. baizhi. entity
mapper- locations: classpath: com/ baizhi/ mapper
5.3 入口类相关配置
@SpringBootApplication
@MapperScan ( basePackages = "com.baizhi.dao" )
public class App {
public static void main ( String [ ] args) {
SpringApplication . run ( App . class , args) ;
}
}
六、spirngboot整合jsp
6.1 导入jar和插件
< ! -- 整合jsp-- >
< -- ! 内嵌tomcat支持的jar-- >
< dependency>
< groupId> org. apache. tomcat. embed< / groupId>
< artifactId> tomcat- embed- jasper< / artifactId>
< / dependency>
< dependency>
< groupId> jstl< / groupId>
< artifactId> jstl< / artifactId>
< version> 1.2 < / version>
< / dependency>
< ! -- 热部署,需要更改-- >
< dependency>
< groupId> org. springframework. boot< / groupId>
< artifactId> spring- boot- devtools< / artifactId>
< version> 1.5 .7 . RELEASE< / version>
< / dependency>
6.2 配置视图解析器
spring:
mvc:
view:
prefix: /
suffix: . jsp
#热部署
server
jsp- servlet:
init- parameters:
development: true
七、启动原理
八 自动配置的原理
8.1 Spring中的属性注入
8.1.1 构建配置文件
构建配置文件 jdbc. properties
jdbc. url= jdbc: mysql: / / localhost: 3306 / springboot
jdbc. driverClassName= com. mysql. jdbc. Driver
jdbc. userName= root
jdbc. password= root
8.1.2 书写配置类完成属性注入
@PropertySource ( value = "classpath:/jdbc.properties" )
public class JavaConf {
@Value ( "${jdbc.url}" )
public String url;
@Value ( "${jdbc.password}" )
public String password;
@Value ( "${jdbc.userName}" )
public String userName;
@Value ( "${jdbc.driverClassName}" )
public String driverClassName;
}
8.2 springboot中的属性注入
8.2.1 在默认的application配置文件中加入相关参数
server. port= 8989
jdbc. url= jdbc: mysql: / / localhost: 3306 / springboot
jdbc. driverClassName= com. mysql. jdbc. Driver
jdbc. userName= root
jdbc. password= root
8.2.2 书写属性类
@ConfigurationProperties ( prefix = "jdbc" )
public class JdbcProp {
private String url;
private String userName;
private String password;
private String driverClassName;
}
8.2.3 在配置类中注入属性类
@EnableConfigurationProperties ( value = JdbcProp . class )
@Configuration
public class JavaConf {
@Autowired
JdbcProp jdbcProp;
@Bean
public DruidDataSource getDruidDataSource ( ) {
DruidDataSource druidDataSource = new DruidDataSource ( ) ;
druidDataSource. setUrl ( jdbcProp. getUrl ( ) ) ;
druidDataSource. setUsername ( jdbcProp. getUserName ( ) ) ;
druidDataSource. setPassword ( jdbcProp. getPassword ( ) ) ;
druidDataSource. setDriverClassName ( jdbcProp. getDriverClassName ( ) ) ;
return druidDataSource;
}
}
九 SpringBoot 整合logback
9.1 在idea中安装lombok插件
1. 日志的级别: debug-- - info-- - warn-- error 日志级别越低打印日志量越多, 越详细
2. 日志的分类: 父日志( 根日志) 控制全局日志
子日志 某个包中的日志 子日志优先级高于父日志
9.2 引入lombok的jar
< ! -- https: / / mvnrepository. com/ artifact/ org. projectlombok/ lombok -- >
< dependency>
< groupId> org. projectlombok< / groupId>
< artifactId> lombok< / artifactId>
< version> 1.18 .6 < / version>
< scope> provided< / scope>
< / dependency>
9.3 相关注解
@Accessors ( chain = true ) 用在类上支持set方法的链式调用
@AllArgsConstructor 用在类上提供全参构造
@Data 用在类上提供get set tostring noargs hashcode and equals
@Getter 用在类上提供get
@Setter 用在类上提供set
@AllArgsConstructor
@NoArgsConstructor
@ToString
@EqualsAndHashCode
十、 SpringBoot 整合Log4j
1.日志的级别:debug—info—warn–error 日志级别越低打印日志量越多,越详细 2.日志的分类: 父日志(根日志) 控制全局日志子日志 某个包中的日志 子日志优先级高于父日志 3.Appender 为日志输出目的地,Log4j提供的appender有以下几种:
org. apache. log4j. ConsoleAppender( 控制台) ,
org. apache. log4j. FileAppender( 文件) ,
org. apache. log4j. DailyRollingFileAppender( 每天产生一个日志文件) ,
org. apache. log4j. RollingFileAppender( 文件大小到达指定尺寸的时候产生一个新的文件) ,
org. apache. log4j. WriterAppender( 将日志信息以流格式发送到任意指定的地方)
4.Layout:日志输出格式,Log4j提供的layout有以下几种
org. apache. log4j. HTMLLayout( 以HTML表格形式布局) ,
org. apache. log4j. PatternLayout( 可以灵活地指定布局模式) ,
org. apache. log4j. SimpleLayout( 包含日志信息的级别和信息字符串) ,
org. apache. log4j. TTCCLayout( 包含日志产生的时间、线程、类别等等信息)
5.打印参数: Log4J采用类似C语言中的printf函数的打印格式格式化日志信息
% m 输出代码中指定的消息
% p 输出优先级,即DEBUG,INFO,WARN,ERROR,FATAL
% r 输出自应用启动到输出该log信息耗费的毫秒数
% c 输出所属的类目,通常就是所在类的全名
% t 输出产生该日志事件的线程名
% n 输出一个回车换行符,Windows 平台为“\r\n”,Unix 平台为“\n”
% d 输出日志时间点的日期或时间,默认格式为ISO8601,也可以在其后指定格式,比如: % d{ yyy MMM dd HH: mm: ss , SSS} ,输出类似: 2002 年10 月18 日 22 : 10 : 28 , 921
% l 输出日志事件的发生位置,包括类目名、发生的线程,以及在代码中的行数。举例:
Testlog4 . main ( TestLog4 . java: 10 )
log4j. rootLogger= DEBUG, stdout
# SqlMap logging configuration. . .
log4j. logger. com. ibatis= DEBUG
log4j. logger. com. ibatis. common. jdbc. SimpleDataSource= DEBUG
log4j. logger. com. ibatis. sqlmap. engine. cache. CacheModel= DEBUG
log4j. logger. com. ibatis. sqlmap. engine. impl. SqlMapClientImpl= DEBUG
log4j. logger. com. ibatis. sqlmap. engine. builder. xml. SqlMapParser= DEBUG
log4j. logger. com. ibatis. common. util. StopWatch= DEBUG
log4j. logger. java. sql. Connection= DEBUG
log4j. logger. java. sql. Statement= DEBUG
log4j. logger. java. sql. PreparedStatement= DEBUG
log4j. logger. java. sql. ResultSet= DEBUG
# Console output. . .
log4j. appender. stdout= org. apache. log4j. ConsoleAppender
log4j. appender. stdout. layout= org. apache. log4j. PatternLayout
log4j. appender. stdout. layout. ConversionPattern= % 5 p [ % t] - % m% n
十一、 SpringBoot 整合Logback
< ? xml version= "1.0" encoding= "UTF-8" ? >
< configuration>
< appender name= "stdout" class = "ch.qos.logback.core.ConsoleAppender" >
< layout class = "ch.qos.logback.classic.PatternLayout" >
< pattern> [ % p] [ % d{ yyyy- MM- dd HH: mm: ss} ] % m % n< / pattern>
< / layout>
< / appender>
< root level= "info" >
< appender- ref ref= "stdout" / >
< / root>
< logger name= "com.sxyh.mapper" level= "DEBUG" / >
< / configuration>
private static Logger logger= LoggerFactory . getLogger ( UserServiceImpl . class ) ;
logger. debug ( "this is debug" ) ;
logger. info ( "this is info" ) ;
logger. warn ( "this is warn" ) ;
logger. error ( "this is error" ) ;
十二、SPI机制
Java中自带了所谓SPI机制,按照约定去META-INF/services目录里找各个接口的配置文件,找到接口的实现类,然后使用当前线程上线文类加载器定位到实现类加载器,通过其加载实现类,然后再反射newInstance得到实现类的实例。 Spring里也有类似的SPI,思路根上面类似,从classpath下所有jar包的META-INF/spring.factories 配置文件中加载标识为EnableAutoConfiguration的配置类,然后将其中定义的bean注入到Spring容器。