跟我学SpringBoot之配置常见用法

只需低头努力,剩下的交给时光,时间会公平地帮你处理一切

配置基本用法

application.yml

book:
  name: "Java"

@Value注解可以直接取配置的值

@RestController
@EnableAutoConfiguration
public class ConfigurationDemo {

    @Value("${book.name}")
    private String bookName;

    @RequestMapping("/config")
    public String config(){
        return bookName;
    }

    public static void main(String[] args){
        SpringApplication.run(ConfigurationDemo.class,args);
    }
}

启动程序,访问:localhost:8080/config,显示上显示

Java

这应该是配置最基础的用法了

不同的环境配置

一般在实际开发过程中,我们都会根据不同的环境来读取不同的配置文件

比如,我们要配置一个文件上传的目录,在本地开发环境可能是Windows下的D:\upload目录

在生产Linux环境可能是/home/admin/upload目录,针对这种不同的环境需要不同的配置,我们一般是根据环境来分配置文件

比如,开发环境的配置文件是application-dev.yml,生产环境的配置文件是application-prod.yml

在项目启动时,可以选择性的激活不同的配置文件,达到不同环境配置隔离的效果

application-dev.yml

file:
  upload: D:\upload

application-prod.yml

file:
  upload: /home/admin/upload

命令行参数

java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.profiles.active=prod

可以在项目启动的时候,增加命令行参数,命令行参数的优先级比配置文件高

命令行还支持json格式参数,用的不多,了解一下就行

java -jar springBoot-demo-1.0-SNAPSHOT.jar -Dspring.application.json='{"file":{"upload":"user/upload"}}'
自定义配置文件名称

我们项目中默认都是取的application.yml或application.properties文件中的配置

如果不想使用application作为配置文件的名称,可以进行自定义读取的配置名称,只需要指定spring.config.name就行了,如下

java -jar springBoot-demo-1.0-SNAPSHOT.jar --spring.config.name=myconfig

注意,你指定了myconfig为配置文件的名称,项目就不会再读取application配置了

导入配置

有时我们有多个配置文件,可以组织到一起,使用import来进行配置的导入

classpath形式导入

spring:
  config:
    import: classpath:my-dev.yml

my-dev.yml

myconfig:
  import:
    name: "yml import config"

file形式导入

spring:
  config:
    import: file:E:\\workspace\\springBoot-demo\\src\\main\\resources\\dev.properties

dev.properties

myconfig.import.name = "properties import config"

可以看到,不管是yml配置文件还是properties配置文件,都可以被spring.config.import导入

占位符配置

配置文件中,可以获取到配置中属性的引用,直接使用${property}占位符进行引用即可,如下

spring:
  app:
    name: "springboot-demo"
    descript: "${spring.app.name} is a springboot application"
    @Value("${spring.app.descript}")
    public String descript;

    @RequestMapping("/descript")
    public String getDescript(){
        return descript;
    }

访问http://localhost:8080/descript 页面上会显示springboot-demo is a springboot application

配置随机数

springboot内置了随机数的取值方式,可以直接在配置中使用random取出来作为应用的配置项

rand:
  number: ${random.value}
  intNumber: ${random.int}
  longNumber: ${random.long}
  uuid: ${random.uuid}
    @Value("${rand.uuid}")
    public String randomValue;
    
    @RequestMapping("/random")
    public String getRandom(){
        return c;
    }
@ConfigurationProperties

有时候使用@Value(’${property}’)注解获取属性值显得比较麻烦,尤其是当我需要配置多个属性值或者配置本身需要分层级时,就显得很麻烦

@ConfigurationProperties注解可以将属性绑定到JavaBean的属性上

最常见的应用就是我们的数据库连接配置

jdbc:
  connection:
    url: "jdbc:mysql://localhost:3306/testdb"
    username: "root"
    passwrod: "123456"
    driver: "com.mysql.jdbc.Driver"

新增一个Bean

@ConfigurationProperties(prefix = "jdbc.connection")
@Configuration
public class DataSource {
    private String url;
    private String username;
    private String password;
    private String driver;

    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;
    }

    public String getDriver() {
        return driver;
    }

    public void setDriver(String driver) {
        this.driver = driver;
    }
}

    @Autowired
    private DataSource dataSource;
    
    @RequestMapping("/datasource")
    public String getDataSourceUrl(){
        return dataSource.getUrl();
    }

启动项目,访问http://localhost:8080/datasource 页面上显示jdbc:mysql://localhost:3306/testdb

可以看到@ConfigurationProperties注解将application.yml中的属性配置自动绑定到DataSource的属性上

当然,前提是两边的属性名称要对上,其实两边的属性名称不需要完全对上

比如配置名user_name、user-name都可以绑定到username属性上,这就是relaxed binding,但还是建议两边的属性名最好保持一致,不要给自己找麻烦

其次,就是prefix配置的层级一定要对上才行

以上就是SpringBoot中配置的几种常用的做法,当然还有很多其他配置的用法比较不常用,这里就不多做介绍

如果有兴趣可以去看一下springboot的官方文档

源码已上传至https://github.com/pzjtian/springboot-demo,请持续关注~

如果感觉对你有些帮忙,请收藏好,你的关注和点赞是对我最大的鼓励!
如果想跟我一起学习,坚信技术改变世界,请关注【Java天堂】公众号,我会定期分享自己的学习成果,第一时间推送给您

在这里插入图片描述

<think>好的,我现在需要帮助用户了解如何在Spring Boot中集成MySQL。首先,我得回想一下自己之前学过的Spring Boot相关知识,确保步骤正确。用户可能是个刚入门的开发者,所以需要把过程讲得详细些,避免使用太专业的术语。 首先,应该从创建项目开始。记得Spring Initializr是个好工具,可以快速生成项目结构。需要选择正确的依赖,比如Spring Data JPA和MySQL Driver。这里要确认用户是否了解这些依赖的作用,可能需要简单解释一下。 接下来是配置数据库连接。application.properties或application.yml文件的配置是关键,包括URL、用户名、密码以及Hibernate的相关设置。要提醒用户替换成自己的数据库信息,特别是注意时区问题,避免常见的连接错误。 然后,创建实体类。用JPA的注解来映射数据库表,这里要示范@Entity和@Table的用法,还有字段的注解如@Id、@GeneratedValue。可能需要解释这些注解的作用,帮助用户理解ORM的概念。 接下来是Repository接口,继承JpaRepository,这样就能获得基本的CRUD方法。这里可以提到Spring Data JPA的好处,减少样板代码。 然后是服务层和控制层的编写。服务类使用Repository进行数据操作,控制器处理HTTP请求。这部分需要展示如何自动注入依赖,以及基本的REST API创建方法。 最后,测试整个应用,确保能正确连接到MySQL,并且API能返回预期结果。常见的错误可能包括依赖缺失、配置错误、数据库权限问题,需要提醒用户检查这些点。 可能用户在实际操作中会遇到问题,比如驱动版本不兼容或者时区设置不对,所以需要给出一些排查建议。另外,补充一些高级配置,比如连接池、日志记录,可以帮助用户进一步优化应用。 整个过程中要保持步骤清晰,代码示例准确,避免遗漏关键步骤。同时,考虑到用户可能不熟悉某些概念,适当加入解释,确保他们能跟上每一步的操作。检查是否有最新的依赖版本,比如MySQL Connector/J的版本是否有更新,需要确认当前的稳定版本号,避免用户因为版本问题出错。</think>以下是Spring Boot集成MySQL的完整实现步骤,包含代码示例和注意事项: 1. 创建Spring Boot项目 使用Spring Initializr(https://start.spring.io)创建项目时选择: - MySQL Driver - Spring Data JPA 或直接在pom.xml添加依赖: ```xml <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-jpa</artifactId> </dependency> <dependency> <groupId>com.mysql</groupId> <artifactId>mysql-connector-j</artifactId> <scope>runtime</scope> </dependency> ``` 2. 配置数据库连接 在application.properties中配置: ```properties # MySQL连接配置 spring.datasource.url=jdbc:mysql://localhost:3306/your_database?useSSL=false&serverTimezone=UTC spring.datasource.username=root spring.datasource.password=your_password # JPA配置 spring.jpa.show-sql=true spring.jpa.hibernate.ddl-auto=update spring.jpa.properties.hibernate.dialect=org.hibernate.dialect.MySQL8Dialect ``` 3. 创建实体类 ```java @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; @Column(nullable = false, unique = true) private String username; @Column(nullable = false) private String email; // 必须包含无参构造函数 public User() {} // getters and setters } ``` 4. 创建Repository接口 ```java public interface UserRepository extends JpaRepository<User, Long> { Optional<User> findByUsername(String username); } ``` 5. 创建Service层 ```java @Service public class UserService { private final UserRepository userRepository; @Autowired public UserService(UserRepository userRepository) { this.userRepository = userRepository; } public User createUser(User user) { return userRepository.save(user); } public List<User> getAllUsers() { return userRepository.findAll(); } } ``` 6. 创建REST控制器 ```java @RestController @RequestMapping("/api/users") public class UserController { private final UserService userService; @Autowired public UserController(UserService userService) { this.userService = userService; } @PostMapping public ResponseEntity<User> createUser(@RequestBody User user) { User savedUser = userService.createUser(user); return new ResponseEntity<>(savedUser, HttpStatus.CREATED); } @GetMapping public List<User> getAllUsers() { return userService.getAllUsers(); } } ``` 常见问题排查: 1. 连接失败:检查MySQL服务是否启动,用户权限是否正确 2. 时区问题:在连接URL中添加`&serverTimezone=Asia/Shanghai` 3. 表不存在:确认`spring.jpa.hibernate.ddl-auto`设置为update/create 4. 驱动问题:确保mysql-connector-j版本与MySQL服务器版本匹配 高级配置建议: ```properties # 连接池配置 spring.datasource.hikari.connection-timeout=20000 spring.datasource.hikari.maximum-pool-size=10 # 显示SQL参数 logging.level.org.hibernate.SQL=DEBUG logging.level.org.hibernate.type.descriptor.sql.BasicBinder=TRACE ``` 启动前准备: 1. 确保MySQL已创建对应数据库 2. 用户有数据库的访问权限 3. MySQL版本建议8.0+,兼容性更好 通过以上步骤即可完成Spring Boot与MySQL的集成,实现基本的CRUD操作。实际开发中可根据需求添加事务管理、数据验证等更多功能。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值