以下介绍的是SpringBoot的基本介绍和入门
一.为什么使用SpringBoot
1.可以创建独立运行的应用,而不需要依赖容器(不需要打war包)
2.提供maven极简配置,简化配置(可能引入不需要的jar),与主流框架集成
3.简化配置,不需要xml配置(注解代替xml),快速构建项目
4.提供相关可视化功能,方便监控
5.为微服务铺路
二.使用场景
1.有spring的地方
2.J2EE/WEB项目
3.微服务
三.入门注解
1.@Configuration:作用于类,标志这个类为配置类,这个类相当于spring的xml文件
2.@Bean:作用于Configuration注解类,相当于一个<bean>,需要把bean对象返回
3.@RestController:作用于类上,表示直接放回字符串或者json字符串(相当于Controller+Responsbody),方法就不需要在
Responsbody注解了
在service中,我们通过@Service注解交给spring管理
@Service
public class UserService {
@Autowired // 注入Spring容器中的bean对象
private UserDAO userDAO;
public List<User> queryUserList() {
// 调用userDAO中的方法进行查询,userDAO从spring容器中获取
return this.userDAO.queryUserList();
}
}
dao类不通过@Respository注解交给spring管理
public class UserDAO {
public List<User> queryUserList(){
List<User> result = new ArrayList<User>();
// 模拟数据库的查询
for (int i = 0; i < 10; i++) {
User user = new User();
user.setUsername("username_" + i);
user.setPassword("password_" + i);
user.setAge(i + 1);
result.add(user);
}
return result;
}
而是用过下面的方式:
@Configuration //通过该注解来表明该类是一个Spring的配置,相当于一个xml文件
@ComponentScan(basePackages = "com.springboot.javaconfig") //配置扫描包
public class SpringConfig {
@Bean // 通过该注解来表明是一个Bean对象,相当于xml中的<bean>,相当于交给spring管理
public UserDAO getUserDAO(){
return new UserDAO(); // 直接new对象做演示
}
}
测试类中
public class MainTest {
public static void main(String[] args) {
// 通过Java配置来实例化Spring容器
AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext(SpringConfig.class);
// 在Spring容器中获取Bean对象
UserService userService = context.getBean(UserService.class);
// 调用对象中的方法
List<User> list = userService.queryUserList();
for (User user : list) {
System.out.println(user.getUsername() + ", " + user.getPassword() + ", " + user.getPassword());
}
// 销毁该容器
context.destroy();
}
}
四.读取外部配置文件
引入jar
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
项目打包后,资源文件全部在classpath目录下:
通过@PropertySouce注解,可以读取多个外部文件,如果配置文件不存在可以配置其他属性
@PropertySouce(value = {"classpath:jdbc.properties","classpath:redis.properties"},ignoreResouceNotFound=true)
例如:之前通过xml配置数据库连接池,现在通过注解来代替xml配置
<!-- 定义数据源 -->
<bean id="dataSource" class="com.jolbox.bonecp.BoneCPDataSource"
destroy-method="close">
<!-- 数据库驱动 -->
<property name="driverClass" value="${jdbc.driverClassName}" />
<!-- 相应驱动的jdbcUrl -->
<property name="jdbcUrl" value="${jdbc.url}" />
<!-- 数据库的用户名 -->
<property name="username" value="${jdbc.username}" />
<!-- 数据库的密码 -->
<property name="password" value="${jdbc.password}" />
<!-- 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0 -->
<property name="idleConnectionTestPeriod" value="60" />
<!-- 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0 -->
<property name="idleMaxAge" value="30" />
<!-- 每个分区最大的连接数 -->
<!--
判断依据:请求并发数
-->
<property name="maxConnectionsPerPartition" value="100" />
<!-- 每个分区最小的连接数 -->
<property name="minConnectionsPerPartition" value="5" />
</bean>
@Configuration
@ConfigurationProperties(profix:"com.pingan.resouce")//读取配置文件的key为com.pingan.resouce.jdbc.url =112334
@PropertySource(value = {"classpath:jdbc.properties"},ignoreResourceNotFound = true)
public class springConfig{
@Value("${jdbc.url}")
private String jdbcUrl;
@Value("${jdbc.driverClassName}")
private String jdbcDriverClassName;
@Value("${jdbc.username}")
private String jdbcUsername;
@Value("${jdbc.password}")
private String jdbcPassword;
@Bean(destroyMethod = "close")
public DataSource dataSource() { //方法名dataSource相当于Bean的id
BoneCPDataSource boneCPDataSource = new BoneCPDataSource();
// 数据库驱动
boneCPDataSource.setDriverClass(jdbcDriverClassName);
// 相应驱动的jdbcUrl
boneCPDataSource.setJdbcUrl(jdbcUrl);
// 数据库的用户名
boneCPDataSource.setUsername(jdbcUsername);
// 数据库的密码
boneCPDataSource.setPassword(jdbcUsername);
// 检查数据库连接池中空闲连接的间隔时间,单位是分,默认值:240,如果要取消则设置为0
boneCPDataSource.setIdleConnectionTestPeriodInMinutes(60);
// 连接池中未使用的链接最大存活时间,单位是分,默认值:60,如果要永远存活设置为0
boneCPDataSource.setIdleMaxAgeInMinutes(30);
// 每个分区最大的连接数
boneCPDataSource.setMaxConnectionsPerPartition(100);
// 每个分区最小的连接数
boneCPDataSource.setMinConnectionsPerPartition(5);
return boneCPDataSource;
}
}
虽然项目中我们推荐用注解代替xml,但是可能因为某些特殊要求,我们必须使用xml,我们可以通过@ImportResouce来加载xml配置
@ImportResource(value = {"classpath:xxx-context.xml"})
五.springboot快速入门
创建springboot的方式1:使用http://start.spring.io,生成一个springboot类,这里不做介绍
直接使用工具创建,这里我是用的是STS,new →spring-start-project-service URL
打包方式:使用jar
父工程:spring-boot-start-parent
依赖:spring-boot-starter-web
插件:maven插件spring-boot-maven-plugin
入口类:AnhuiApplication为应用程序入口类,在com.pingan.anhui包下,其他项目必须在其子包内.
启动方式:运行AnhuiApplication的main方法,或者通过springboot的maven插件
全局配置文件:application.properties(或者application.yml)
pom.xml文件
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.pingan</groupId>
<artifactId>anhui</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<name>anhui</name>
<description>Demo project for Spring Boot</description>
<!--spring boot 父工程 -->
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<!--spring boot 编码 -->
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<java.version>1.8</java.version>
</properties>
<dependencies>
<!-- <dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
</dependency>
-->
<!--spring boot web依赖 -->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<!--spring boot 测试相关-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<!--spring boot maven插件 -->
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
入口类
@SpringBootApplication:Spring Boot项目的核心注解,主要目的是开启自动配置。;
@SpringBootApplication
public class AnhuiApplication {
public static void main(String[] args) {
SpringApplication.run(AnhuiApplication.class, args);
}
}
运行:2种方式运行
第一种:运行main方法:spring boot app (java application)
第二种:通过springboot的maven插件
springboot的核心
springboot项目的*Application入口类,入口类中main方法
@SpringBootApplication注解是springBoot的核心注解,也是个组合注解
其中
@SpringBootConfiguration也是组合注解,
@EnableAutoConfiguration表示启动自动配置,该注解会使springboot根据项目依赖的jar自动配置项目配置项,如我们添加spring-boot-starter-web的依赖,项目自动引入springMVC的依赖,并且自动配置tomcat和springMVC(核心Servlet等)
如果不需要springboot的自动配置,可设置自动排除,如排除redis的自动配置
@EnableAutoConfiguration(exclude = {RedisAutoConfiguration.class})
@ComponentScan:默认扫描@SpringBootApplicaiton所在类的同级目录,以及他的子目录,所以一般我们其他包都是入口类的子包
在springboot项目中推荐使用springbootConfiguration代替Configuration
springboot全局配置文件:application.properties
Spring Boot项目使用一个全局的配置文件application.properties或者是application.yml,在resources目录下或者类路径下的/config下,一般我们放到resources下。
springboot项目中有默认的配置,如果需要修改我们可以在这个配置文件中设置去覆盖默认的配置
比如在application.properties中配置
server.port = 8088
server.servlet-path = *.html 配DispatcherServlet的规则为:*.html
server.context-path=/ssp #配置项目名字
server.session-timeout=60 session超时时间,默认30min