Spring Boot学习笔记-01 | 如何优雅的使用Java代码成功配置Druid并使用

 

Spring Boot简介

SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布第一个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的优秀特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。

SpringBoot框架中还有两个非常重要的策略:开箱即用和约定优于配置。

SpringBoot所具备的特征有:

(1)可以创建独立的Spring应用程序,并且基于其Maven或Gradle插件,可以创建可执行的JARs和WARs;

(2)内嵌Tomcat或Jetty等Servlet容器;

(3)提供自动配置的“starter”项目对象模型(POMS)以简化Maven配置;

(4)尽可能自动配置Spring容器;

(5)提供准备好的特性,如指标、健康检查和外部化配置;

(6)绝对没有代码生成,不需要XML配置。


目录

Spring Boot简介

第一个Spring Boot程序

需要注意

Spring Boot配置Druid并使用

连接数据库的需求案例中注解说明

通过属性注入方式实现

需要注意的2个注解

更优雅的实现


第一个Spring Boot程序

首先创建一个Maven项目,然后根据如下步骤来实现第一个Spring Boot案例

  • 在pom文件中引入SpringBoot的父级依赖,并添加启动器依赖
<?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>

    <parent>
        <--父级-->
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.4.RELEASE</version>
    </parent>

    <groupId>edu.xatu</groupId>
    <artifactId>SpringBoot-00</artifactId>
    <version>1.0-SNAPSHOT</version>

    <dependencies>
        <--启动依赖-->
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
    </dependencies>
    
</project>
  • 编写一个启动类
package edu.xatu;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class Application {
    public static void main(String[] args) {
        SpringApplication.run(Application.class,args);
    }
}
  • 编写一个控制类
package edu.xatu.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import javax.sql.DataSource;

@RestController
public class Controller {

    @GetMapping("hello")
    public String Hello(){
        return "Hello springboot!";
    }
}

然后运行启动类,并在浏览器访问localhost:8080/hello,如果浏览器中展示Hello springboot!即为成功运行。

需要注意

1.  Springboot的启动类是程序运行的入口,需要在类上添加@SpringBootApplication注解。

2.  使用SpringBootApplication注解,启动类可扫描到当前启动类包下的类及其在所有子类,所以这里注意目录结构:

3.  控制类需要@RestController注解,这个注解是@Controller 和 @ResponseBody的结合,表明当前类是控制器且返回的是一组数据,不是页面。源码如下:

4.  @GetMapping 注解是 @RequestMapping(method = RequestMethod.GET)的简写。作用是对应查询,表明是一个查询URL映射,比如:@GetMapping(value = “/hello”)来代替@RequestMapping(value=”/hello”,method= RequestMethod.GET)。

Spring Boot配置Druid并使用

  • 首先引入Druid依赖

        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>druid</artifactId>
            <version>1.1.10</version>
        </dependency>
  • 创建一个数据库,或者只要有一个可连接的数据库就行
  • 创建连接参数的配置文件application.properties
jdbc.driverName=com.mysql.cj.jdbc.Driver
jdbc.url=jdbc:mysql://localhost:3306/TestDB?serverTimezone=UTC
jdbc.username=root
jdbc.password=123456
  • 创建一个对应的配置类
import javax.sql.DataSource;

/**
 * 工具类 使用数据库配置
 * @PropertySource指定配置文件在哪里
 */
@Configuration
@PropertySource("application.properties")
public class jdbcConfig {

    @Value("${jdbc.url}")
    String url;

    @Value("${jdbc.driverName}")
    String driver;

    @Value("${jdbc.user}")
    String username;

    @Value("{jdbc.password}")
    String password;
   
    @Bean
    public DataSource dataSource(){
        DruidDataSource druidSource = new DruidDataSource();
        druidSource.setDriverClassName(driver);
        druidSource.setUrl(url);
        druidSource.setUsername(username);
        druidSource.setPassword(password);
        return druidSource;
    }
}
  • 在控制器类中注入数据源,然后启动测试
package edu.xatu.controller;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.sql.DataSource;

@RestController
public class Controller {

    @Autowired
    private DataSource dataSource;

    @GetMapping("hello")
    public String Hello(){
        System.out.println("DataSource: "+dataSource);
        return "Hello springboot!";
    }
}
  • 通过Debug来查看一下成功读取数据库连接信息了呢,而且浏览器端也可以正常打印字符串的。

连接数据库的需求案例中注解说明

1.  在@Configuration注解中是包含@Component注解的,被@Configuration修饰的类被定义为一个Spring容器。

2.  @PropertySource()注解是来指定配置文件的位置。

3.  @Bean相当于Spring配置文件中的<bean />标签可以在Spring容器中注入一个bean。相当于实例化一个dataSource并交给Spring容器管理。

4. @Value使用方式,@Value(value = “${user.userName}”),这个时候就会把配置文件里的user.userName的值赋值给变量userName。

5. @Autowired注解是使用byType方式的,byType方式是根据属性类型在容器中寻找bean类。

在上面的代码中很明显如果配置文件的内容很多的情况下,@Value注解的使用将会很繁琐。

通过属性注入方式实现

  • 使用注解@ConfigurationProperties注解新建一个配置类
package edu.xatu.config;

import org.springframework.boot.context.properties.ConfigurationProperties;

@ConfigurationProperties(prefix = "jdbc")
public class JdbcProperties {

    private String driverName;
    private String url;
    private String username;
    private String password;

    public String getDriverName() {
        return driverName;
    }

    public void setDriverName(String driverName) {
        this.driverName = driverName;
    }

    public String getUrl() {
        return url;
    }

    public void setUrl(String url) {
        this.url = url;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}
  • 在pom依赖中添加一段依赖
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
        </dependency>
  • 将Jdbcproperties对象注入到JdbcConfig
@Configuration
@EnableConfigurationProperties(JdbcProperties.class)
public class jdbcConfig {

    @Bean
    public DataSource dataSource(JdbcProperties jdbcProperties){
        DruidDataSource druidSource = new DruidDataSource();
        druidSource.setDriverClassName(jdbcProperties.getDriverName());
        druidSource.setUrl(jdbcProperties.getUrl());
        druidSource.setUsername(jdbcProperties.getUsername());
        druidSource.setPassword(jdbcProperties.getPassword());
        return druidSource;
    }
  • 然后启动程序测试一下,不出意外是依然成功的

需要注意的2个注解

1.  @ConfigurationProperties:被标注的类会使用外部文件给bean注入属性

2.  @EnableConfigurationProperties作用:启用配置属性类

更优雅的实现

假如一段属性只有以恶个bean需要使用,我们无需将其注入到一个类(Jdbcproperties),直接在需要的地方声明即可。

  • 在jdbcConfig中,将Jdbcproperties中刚使用的两个注解@PropertySource("application.properties")和@EnableConfigurationProperties(JdbcProperties.class)可以去掉,然后将@ConfigurationProperties 直接放在方法上:

@Configuration
public class jdbcConfig {

    @Bean
    @ConfigurationProperties(prefix = "jdbc")
    public DataSource dataSource(){
        return new DruidDataSource();
    }
}
  • 因为这里不需要@PropertySource("application.properties")所以是不需要配置项类的,将配置项类注释掉
  • 然后同样方法启动测试

这样就更加优雅的实现配置Druid数据库啦~

发布了45 篇原创文章 · 获赞 11 · 访问量 4804

猜你喜欢

转载自blog.csdn.net/weixin_44187963/article/details/105046681