Spring Boot 入门

作者:加菲猫 2018-11-20 106 0

简介

J2EE 配置繁多,开发效率低,部署流程复杂,继承第三方服务难度大。

Spring Boot 可用来简化 Spring 应用开发,约定大于配置。

官方文档:https://spring.io/projects/spring-boot#learn

特点

  • 松耦合,不论在开发阶段,还是部署阶段,每个服务都是独立的

  • 可使用不同的语言开发

  • 易于和第三方集成

  • 可部署在中低端服务器上,降低成本

优点

微服务:面向服务,一个项目只提供一种服务,如定时服务、邮件服务、redis 服务……

  • 快速创建独立运行的 spring 项目

  • 使用嵌入式的 Servlet 容器,不用打包,无需部署到 tomcat

  • starters 自动依赖,可指定启动哪个服务,实现版本控制

  • 自动配置,简化开发,无代码生成,开箱即用

  • 提供了运行时监控

  • 集成了云计算

缺点

  • 微服务架构需要更多操作(前期)

  • 当服务数量增加,管理复杂性也增加

  • 分布式系统复杂,难以管理

  • 分布式部署,导致跟踪问题的难度变大

使用

  • idea 2018:https://blog.csdn.net/newabcc/article/details/80601933

  • jdk 1.8

  • maven 3.6.0

步骤

  • 第一步:配置 maven 的 settings,指定 jdk 版本

<profile>
	<id>jdk-1.8</id>
	<activation>
		<activeByDefault>true</activeByDefault>
		<jdk>1.8</jdk>
	</activation>
	<repositories>
		<maven.compiler.source>1.8</maven.compiler.source>
		<maven.compiler.target>1.8</maven.compiler.target>
		<maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion>
	</repositories>
</profile>
  • 第二步:配置 maven 的 pom.xml,导入 jar 包

<parent>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-parent</artifactId>
	<version>2.1.0.RELEASE</version>
</parent>
	
<dependency>
	<groupId>org.springframework.boot</groupId>
	<artifactId>spring-boot-starter-web</artifactId>
</dependency>
  • 第三步:创建主程序类

@Controller
public class HelloController {

	@ResponseBody 
	@RequestMapping("/hello")
	public String hello(){
		return "hello world";
	}
  
}
  • 第四部:打包

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>
  • 第五步:热部署

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-devtools</artifactId>
    <optional>true</optional>
</dependency>

修改代码后,Ctrl + F9

yaml 配置

  • 配置 person 属性

person:
  name: kelly
  age: 18
  boss: true
  pets: [dog, cat, duck]
  children: {mary: 5, john: 3}
  • 给 Person 赋值

// 指定读取的配置文件,可指定多个
@PropertySource(value = {"classpath:person.yaml"})
@Component
@ConfigurationProperties(prefix = "person")
// 数据校验
@Validated
public class Person {
    // 或者使用 @Value 给单个属性赋值,必须指定到叶子节点,所以复杂类型除外,如 map、自定义类
    // @Value("${person.name}")
    private String name;
    // @Value("#{12*2}")
    private Integer age;
    private boolean boss;
    private List<String> pets;
    private Map<String, String> children;
    // 数据校验
    // @Email
    private String email;
    
    public String getName() {
        return name;
    }
    public void setName(String name) {
        this.name = name;
    }
    public Integer getAge() {
        return age;
    }
    public void setAge(Integer age) {
        this.age = age;
    }
    public boolean isBoss() {
        return boss;
    }
    public void setBoss(boolean boss) {
        this.boss = boss;
    }
    public List<String> getPets() {
        return pets;
    }
    public void setPets(List<String> pets) {
        this.pets = pets;
    }
    public Map<String, String> getChildren() {
        return children;
    }
    public void setChildren(Map<String, String> children) {
        this.children = children;
    }
}
@ConfigurationProprieties @Value
功能 批量注入配置文件中的属性 指定单个属性
松散绑定 支持(user-name→userName) 不支持
SpEL(计算:#{1+1}) 不支持 支持
数据校验(@Validated) 支持 不支持
复杂类型封装 支持 不支持
  • 配置自动提示

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-configuration-processor</artifactId>
    <optional>true</optional>
</dependency>
  • 配置文件中有中文时,解决乱码问题

image.png

常用配置

  • 加载自定义配置文件

@ImportResource(locations = {"classpath:beans.xml"})
@SpringBootApplication
public class Demo02Application {
    public static void main(String[] args) {
        SpringApplication.run(Demo02Application.class, args);
    }
}
  • 切换配置文件

image.png

spring.profiles.active=dev

或者打包后,在启动时指定:java -jar demo-0.0.1-SNAPSHOT.jar –spring.profiles.active=dev

发表评论

下一篇: 上一篇: