简介
Spring Boot致力于在蓬勃发展的快速应用开发领域成为领导者,几乎成为了每个公司都缺一不可的使用的技术,所以学好Spring Boot对于Java程序员是必不可少的。本文章对Spring Boot进行详解,通过案例实现Spring Boot一些功能,作为复习Spring Boot的一手资料。
1.1 Spring Boot 快速入门
1. 新建maven项目,在pom文件中加入以下依赖:
<!--这是表示继承关系,此启动类必不可少必不可少--> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> </parent><!--这是表示web服务器,默认为 Tomcat--> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies>
2. java包下新建com.huayu包,并在huayu包下新建类Application,此类很重要,作为spring boot的引导类 ,且位置需要被识别到,要把位置提高,可以放在java包下或者main包下都可以。个人放到com下的huayu包下。
@SpringBootApplication //标识 spring boot 的引导类
public class Application {
public static void main(String[] args) {
SpringApplication.run(Application.class,args);
}
}
3. 无论如何,我们都要编写控制层,因为没人知道你要写些什么。在huayu下新建controller包,随便写一个类,就叫他controller吧,
@RestController //标识为 Rest 风格的控制层 Controller
@RequestMapping("/test") //访问路径
public class controller {
@GetMapping("/{id}") //标识Get请求,且要加一个 id
public String test(@PathVariable Integer id){
System.out.println(id); //标识上方 id 指代的位置
return "欢迎来到springboot";
}
}
4. 运行Application类,利用PostMan向服务器发送get请求,没有设定yml文件的话,默认访问端口号为8080,通过 http://localhost:8080/test/1 可以得到返回来的值:“欢迎来到springboot”。且控制台也会输出1。
1.2 Spring Boot 配置文件
对于配置文件,我们并不陌生。对于spring boot,我们就使用最为常用的yml文件格式来配置spring boot。
1.2.1 配置文件中资源定义
在 resources资源目录下新建 application.yml 。
注意:application.properties
也是一种配置,此格式优先级最高。
1. 服务器端口号的修改
注意冒号后要填一个空格。
server: port: 8081
2. 定义一对数据
使用冒号隔开就好,注意冒号后要填一个空格。
lesson1: Springboot1 lesson2: Springboot2
3. 定义列表,可以在列表再定义列表,注意冒号后要填一个空格。
enterprise: name: huayu age: 16 list: - java - python - c++
4. 定义运行环境,使用3个 - 隔开,开发环境和生产环境、测试环境这两个一样的,不同的写法而已。通过active指定当前启用的环境
spring: profiles: active: dev #设置现在启用的环境 --- spring: config: activate: on-profile: dev #给开发环境起的名字 server: port: 81 --- spring: profiles: pro #给生产环境起的名字 server: port: 82 --- spring: profiles: test #给测试环境起的名字 server: port: 83 ---
1.2.2 配置文件中资源获取
我们如何获取在资源呢?
使用Value实现注入,使用自动装配Environment和自己定义的类
我们再演示之前新建pojo类和包
对于pojo类,需要加上两个注解:
1. @Component - 将实体类 bean
的创建交给 Spring
管理。
2. @ConfigurationProperties
:
表示加载配置文件
其中使用了 prefix
属性指定只加载指定前缀的数据
@Component
@ConfigurationProperties(prefix = "enterprise")
public class pojo {
private String name;
private Integer age;
//省略get set
}
@RestController //标识为 Rest 风格的控制层 Controller
@RequestMapping("/test") //访问路径
public class controller {
//如何实现读取数据呢
//1. 可以使用注入:
@Value("${lesson1}")
private String lesson1;
@Value("${lesson2}")
private String lesson2;
@Value("${enterprise.name}")
private String name;
//2. 自动装配
//spring boot提供了这种方式:会将配置文件中所有的数据封装到Environment对象中
//用哪个数据只需要通过调用getProperty(String name)方法获取。
@Autowired
private Environment environment;
//3. 自己定义
@Autowired
private pojo pojo;
@GetMapping("/{id}") //标识Get请求,且要加一个 id
public String test(@PathVariable Integer id){ //标识上方 id 指代的位置
System.out.println(lesson1);
System.out.println(lesson2);
System.out.println("===>>>"+name+"<<<===");
System.out.println("===>>>"+environment.getProperty("enterprise.list[0]")+"<<<===");
System.out.println("===>>>"+pojo.getName()+"<<<===");
System.out.println(id);
return "欢迎来到springboot";
}
}
使用PostMan发送查看输出结果:
控制台:
Springboot1
Springboot2
===>>>huayu<<<===
===>>>java<<<===
===>>>huayu<<<===
1
注意:若有在pojo类上有红色提示就加入下面依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-configuration-processor</artifactId>
<optional>true</optional>
</dependency>
1.2.3 使用命令行启动参数设置
设置为测试环境启动
java –jar xxx.jar –-spring.profiles.active=test
那么这种方式能不能临时修改端口号呢?也是可以的,可以通过如下方式
java –jar xxx.jar –-server.port=88
当然也可以同时设置多个配置,比如即指定启用哪个环境配置,又临时指定端口,如下
java –jar springboot.jar –-server.port=88 –-spring.profiles.active=test
注意:如果使用了多种方式配合同一个配置项,优先级高的生效。
1.3 端口号书写位置优先级问题
以下级别越高,那么优先级越高。
用处:开发完毕后,测试人员需要修改其他的东西,就需要再写一些yml配置文件。那么就涉及到了优先级问题了,因为我们也设计了yml文件
注意:SpringBoot 2.5.0版本存在一个bug,我们在使用这个版本时,需要在 jar
所在位置的 config
目录下创建一个任意名称的文件夹
1级:classpath:application.yml
表示:直接写在resource下的yml属于1级优先级2级:classpath:config/application.yml
表示:写在resource.config包下的yml属于2级优先级3级:file :application.yml
表示:我们将文件打上包后,写在此包位置下的yml文件属于3级优先级4级:file :config/application.yml
表示:我们将文件打上包后,写在此包位置下的config下的yml文件属于4级优先级
2.1 Spring Boot 整合Junit
2.1.1 回顾Spring 整合 Junit
加上@RunWith 表示指定运行器
加上@ContextConfiguration 表示指定配置类或配置文件
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = SpringConfig.class)
public class UserServiceTest {
@Autowired
private BookService bookService;
@Test
public void testSave(){
bookService.save();
}
}
2.1.2 完成Spring Boot 整合 Junit
其实很更加简单,只需要再test.java下创建同路径的(规范),比如在此下新建com.huayu,只需要在此目录下新建AppcationTest类,加上注解@SpringBootTest即可完成。
@SpringBootTest
public class ApplicationTest {
@Autowired
private BookService bookService;
@Test
void save(){
bookService.save();
}
}
3.1 Spring Boot 整合 Mybatis
3.1.1 回顾 Spring 整合 Mybatis
1. 首先需要在Spring配置类SpringConfig中:
1.1 通过注解@Import 导入 JdbcConfig
配置类、导入 MybatisConfig
配置类
1.2 通过注解@PropertySource 导入资源文件
1.3 通过注解@ComponentScan 指定包别名
1.4 通过注解@Configuration 表明此类为配置类
@Configuration
@ComponentScan("com.itheima")
@PropertySource("classpath:jdbc.properties")
@Import({JdbcConfig.class,MyBatisConfig.class})
public class SpringConfig {
}
2. 在编辑 JdbcConfig
配置类、导入 MybatisConfig
配置类中:
JdbcConfig中通过SpringConfig中的@PropertySource定义数据源-通过@Value("${xxx.xxx}");设置好了再设置DataSource中各个值。
public class JdbcConfig {
@Value("${jdbc.driver}")
private String driver;
@Value("${jdbc.url}")
private String url;
@Value("${jdbc.username}")
private String userName;
@Value("${jdbc.password}")
private String password;
@Bean
public DataSource getDataSource(){
DruidDataSource ds = new DruidDataSource();
ds.setDriverClassName(driver);
ds.setUrl(url);
ds.setUsername(userName);
ds.setPassword(password);
return ds;
}
}
MybatisConfig
中需要定义 SqlSessionFactoryBean和
定义映射配置,属于mybatis的配置文件。
@Bean
public MapperScannerConfigurer getMapperScannerConfigurer(){
MapperScannerConfigurer msc = new MapperScannerConfigurer();
msc.setBasePackage("com.huayu.dao");
return msc;
}
@Bean
public SqlSessionFactoryBean getSqlSessionFactoryBean(DataSource dataSource){
SqlSessionFactoryBean ssfb = new SqlSessionFactoryBean();
ssfb.setTypeAliasesPackage("com.huayu.pojo");
ssfb.setDataSource(dataSource);
return ssfb;
}
3.1.2 Spring Boot 整合 Mybatis
1. 需要加入Mybatis的依赖、MySQL的依赖、还有一些启动项的依赖和其他的。
<parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.5.0</version> </parent> <dependencies> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter</artifactId> </dependency> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <scope>runtime</scope> </dependency> <dependency> <groupId>org.mybatis.spring.boot</groupId> <artifactId>mybatis-spring-boot-starter</artifactId> <version>2.2.0</version> </dependency> <dependency> <groupId>com.alibaba</groupId> <artifactId>druid</artifactId> <version>1.1.16</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> </dependencies> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build>
2. 定义实体类Book、dao层接口BookDao、引导类Application、yml配置文件Application.yml、静态页面存放处static和测试类ApplicationTest。
这里有几个说一下:
1. 对于BookDao需要加上@Mapper注解让Mybatis识别为Dao层。
2. 对于Application.yml我们需要这样设置:
spring: datasource: #设置datasource driver-class-name: com.mysql.cj.jdbc.Driver url: jdbc:mysql:///db1 username: root password: 1234 #这一行是指定数据源,我们用的是druid的DruidDataSource type: com.alibaba.druid.pool.DruidDataSource
3. 只需要运行引导类就好了。
4. 总结
总结下从spring转换为spring boot的快速办法:我们有新加入的和删除的两部分
新加入的:1)yml 配置文件 2)spring boot 的一些注解 3)依赖的区别 4)引导类、static静态包
删除的: 1)spring配置文件 2)自然包括了jdbc和mybatis配置文件 3)资源文件也被yml代替
总结:太方便了