1、springboot配置
1.0 maven配置最好增加对jdk版本的确认
<profiles>
<profile>
<id>jdk-1.8</id>
<activation>
<activeByDefault>true</activeByDefault>
<jdk>1.8</jdk>
</activation>
<properties>
<maven.compiler.source>1.8</maven.compiler.source>
<maven.compiler.target>1.8</maven.compiler.target>
<maven.compiler.compilerVersion>1.8</maven.compiler.compilerversion>
</properties>
</profile>
</profiles>
1.1、pom引入springboot 文件配置:
<groupId>org.example</groupId>
<artifactId>www-ES-Api</artifactId>
<packaging>pom</packaging>
<version>1.0-SNAPSHOT</version>
<!-- 依赖管理 -->
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
<!-- 几乎声明了所有开发中常用的依赖的版本号,自动版本仲裁机制. -->
<!--org.springframework.boot的父项目包-->
<parent>
<groupId>org.springframework. boot</ groupId>
<artifactId>spring-boot-dependencies</artifactId>
<version>2.3.4.RELEASE</version>
</parent>
starter场景启动器
<!--
1、见到很多spring-boot-starter-* :*就某种场景
2、只要引入starter,这个场景的所有常规需要的依赖我们都自动引入
3、SpringBoot所有支持的场景
https://docs.spring.io/spring-boot/docs/current/reference/html/using-spring-boot
4、见到的 *-spring-boot-starter:第三方为我们提供的简化开发的场景启动器。
版本控制:
1、引入依赖默认都可以不写版本
2、引入非版本仲裁的jar,要写版本别
2、springboot以外的其他依赖版本的配置
<properties>
<!--版本设置-->
<mysql.version>5.1.30</mysql.version>
</properties>
<parent>
<artifactId>spring-boot-starter-parent</artifactId>
<groupId>org.springframework.boot</groupId>
<version>2.3.5.RELEASE</version>
</parent>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
</dependency>
</dependencies>
2.1自动配置
-
自动配好Tomcat
-
引入Tomcat依赖。
-
配置Tomcat
<dependency> <groupId>org.springframework.boot</ groupId> <artifactId>spring-boot-starter-tomcat</artifactId> <version>2.3.4.RELEASE</version> <scope>compile</scope> </dependency>
-
自动配好SpringMVC
- 引入SpringMVC全套组件
- 自动配好SpringMVC常用组件(功能)
-
自动配好Web常见功能,如:字符编码问题
- SpringBoot帮我们配置好了所有web开发的常见场景
-
默认的包结构
-
主程序所在包及其下面的所有子包里面的组件都会被默认扫描进来。
-
无需以前的包扫描配置
-
想要改变扫描路径,@SpringBootApplication(scanBasePackages=“com.atguigu”)或者
@ComponentScan指定扫描路径
@SpringBootApplication 等同于 @SpringBootConfiguration @EnableAutoConfiguration @ComponentScan("com.atguigu.boot"")
-
-
各种配置拥有默认值
- 默认配置最终都是映射到MultipartProperties
- 配置文件的值最终会绑定每个类上,这个类会在容器中创建对象
-
按需加载所有自动配置项
- 非常多的starter
- 引入了哪些场景这个场景的自动配置才会开启
- SpringBoot所有的自动配置功能都在spring-boot-autoconfigure包里面
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-batch</artifactId>
</dependency>
</dependencies>
3、使用
-
主程序入口
package com.toec.boot; import com.toec.boot.bean.Pet; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.ConfigurableApplicationContext; /** * @Package: com.toec.boot * @ClassName: MainApplication * @Description: springboot初始化,主类设置 * @Date: 1/9/2022 3:19 PM * @Version: 1.0 */ @SpringBootApplication(scanBasePackages="com.toec") public class MainApplication { public static void main(String[] args) { // 1、返回我们IoC容器 ConfigurableApplicationContext run = SpringApplication.run(MainApplication.class, args); //2、查看容器里面的组件 String[] beanDefinitionNames = run.getBeanDefinitionNames(); for (String name:beanDefinitionNames){ System.out.println(name); } // 3、从容器中获取组件 Pet tom = run.getBean("tom",Pet.class); Pet tom1 = run.getBean("tom",Pet.class); // Pet tom2 = run.getBean("tom",Pet.class); System.out.println("组件:"+(tom==tom1)); } }
-
控制层接口
package com.toec.boot.controller; import com.toec.boot.vo.DeviceVo; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; /** * @Package: com.toec.boot.controller * @ClassName: HelloController * @Description: 请求接口 * @Date: 1/9/2022 3:23 PM * @Version: 1.0 */ //@ResponseBody //@Controller @RestController public class HelloController { @RequestMapping("/hello") public String Handler(){ return "Hello,Spring boot"; } @GetMapping("getHello") public String HandlerGet(){ return "Hello,Spring boot,get"; } @PostMapping("/postHello") public String HandlerPost(DeviceVo deviceVo){ String msg = deviceVo.getDeviceId(); System.out.println(msg); return "hello,Spring boot , post,"+msg; } }
-
bean实体
package com.toec.boot.bean; /** * @Package: com.toec.boot.bean * @ClassName: Pet * @Description: 宠物 * @Date: 1/9/2022 10:04 PM * @Version: 1.0 */ public class Pet { private String name; public Pet() { } public Pet(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Pet{" + "name='" + name + '\'' + '}'; } }
package com.toec.boot.bean; /** * @Package: com.toec.boot.bean * @ClassName: User * @Description: 用户 * @Date: 1/9/2022 10:05 PM * @Version: 1.0 */ public class User { private String name; private int age; public User(String name, int age) { this.name = name; this.age = age; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } @Override public String toString() { return "User{" + "name='" + name + '\'' + ", age=" + age + '}'; } }
-
bean配置
-
@Configuration 基本使用
-
配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的
-
配置类本身也是组件
-
@Import({User.class, DBHelper.class}) //可以导入全类名组件,默认组件的名字就是全类名
-
proxyBeanMethods:代理bean的方法
- Full(proxyBeanMethods = true)、【保证每个@Bean方法被调用多少次返回的组件都是单实例的】
- Lite(proxyBeanMethods = false)【每个@Bean方法被调用多少次返回的组件都是新创建的】
- 组件依赖必须使用Full模式默认。其他默认是否Lite模式
package com.toec.boot.config; import com.toec.boot.bean.Pet; import com.toec.boot.bean.User; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; /** * @Package: com.toec.boot.config * @ClassName: Config * @Description: bean配置 * @Date: 1/9/2022 10:07 PM * @Version: 1.0 * 1、配置类里面使用@Bean标注在方法上给容器注册组件,默认也是单实例的 * 2、配置类本身也是组件 * 3、Configuration中属性proxyBeanMethods :代理bean的方法 * 若配置为true,外部无论对配置类中的这个组件注册方法调用多少次获取的都是之前注册容器中的单实例对象 * //如果@Configuration(proxyBeanMethods = true )代理对象调用方法。 * SpringBoot总会检查这个组件是否在注册容器中的单实例对象 * 保持组件单实例 */ @Import({User.class, DBHelper.class}) //可以导入全类名组件,可以不用 @Configuration(proxyBeanMethods = false) //告诉SpringBoot这是一个配置类==配置文件 public class MyConfig { @Bean public User user(){ return new User("toec",20); } @Bean("tom") public Pet pet(){ return new Pet("dog"); } }
-
-
配置文件
server.port=8088 spring.servlet.multipart.max-file-size=10000MB spring.datasource.url = jdbc:mysql://localhost:3306/test?setUnicode=true&characterEncoding=utf8 spring.datasource.username=root spring.datasource.password=1234 spring.datasource.driver-class-name=com.mysql.jdbc.Driver