springBoot 中 bootstrap 与 application

一、简介

        springBoot 有两种配置文件,一种是 bootstrap(.yml 或者 properties),一种是 application(.yml 或者 properties) 。

二、作用

        bootstrap(.yml/.properties) 文件也是 SpringBoot 的默认配置文件,而且其加载的时间相比于 application(.yml/.properties) 更早。

        application(.yml/.properties)bootstrap(.yml/.properties) 虽然都是 SpringBoot 的默认配置文件,但是定位却不相同。

        bootstrap(.yml/.properties) 可以理解成系统级别的一些参数配置,这些参数一般是不会变动的。

        application(.yml/.properties) 可以用来定义应用级别的参数。

        如果该项目继承注册中心和配置中心,最好声明在 bootstrap(.yml/.properties) 文件中。

三、优先级

        在同一级目录下,会先比较前缀 bootstrap application,其中 bootstrap application 的优先级高,其次再去比较后缀 .properties .yml,其中 .properties .yml 优先级高。

        所以它们的执行顺序如下:

bootstrap.properties > bootstrap.yml > application.properties > application.yml

四、配置覆盖

4.1 相同类型比较 properties 优先级高

        当同一个配置属性在 bootstrap.properties bootstrap.yml 文件中都存在时,那么 properties 中的配置会被加载,而忽略 yml 文件中的配置(即优先级高的配置覆盖优先级低的配置),不同配置相互互补。此处 application(.properties/yml) 同理。

4.2 不同类型比较 applicatioin 覆盖 bootstrap

        但当同一配置在 bootstrap application 中都存在时,那么虽然优先加载 bootstrap 但是会被 applicatioin 中的配置覆盖,此时则变成了低优先级覆盖高优先的配置,所以网上很多文章所说的高优先级覆盖低优先级其实是不严谨的。

4.3 application.properties 覆盖其他三种配置文件

        当同一个配置属性在四种配置(bootstrap.propertiesbootstrap.ymlapplication.propertiesapplication.yml)都存在,application.properties 里的配置一定是会覆盖其他配置文件。

        首先遵循第二点:虽然优先加载 bootstrap 但是会被 applicatioin 中的配置覆盖,这时候就只剩 application.yml 和 application.properties 了,其次遵循第一点:即优先级高的配置覆盖优先级低的配置,所以 application.properties 的配置文件会覆盖其他配置文件。

五、覆盖验证

5.1 验证相同类型比较 properties 优先级高

        准备 bootstrap.properties 和 bootstra.yml ,最后查看哪个端口被占用

# bootstrap.properties
server.port=8888
# bootstrap.yml
server
  port: 7777

        最后结果,如下图,可以得出结论配置文件前缀都相同的情况下,优先级高(.properties)的配置覆盖优先级低(.yml)的配置

        如果创建的 bootstrap 文件未生效的话,请参考以下的 maven 依赖

 <!-- 继承springboot,不加这个parent标签就会报错 -->
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>1.5.8.RELEASE</version>
    </parent>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter</artifactId>
        </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>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.0</version>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-dependencies</artifactId>
                <version>Camden.SR7</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>

5.2 验证不同类型比较 applicatioin 覆盖 bootstrap

        准备 bootstrap.properties 和 application.properties,最后查看哪个端口被占用。

# bootstrap.properties
server.port=8888
# application.properties
server.port=6666

        最后结果,如下图,当同一配置在 bootstrap application 中都存在时,优先加载 bootstrap 但是会被 applicatioin 中的配置覆盖。

 5.3 验证 application.properties 覆盖其他三种配置文件

        准备 bootstrap.properties、bootstrap.yml、application.properties 和 application.yml 四种文件最后查看哪个端口被占用。

# bootstrap.properties
server.port=8888
# bootstrap.yml
server
  port: 7777
# application.properties
server.port=6666
# application.yml
server
  port: 5555

        最后结果如下图,同一个配置属性在四种配置都存在,application.properties 里的配置一定是会覆盖其他配置文件。

  • 5
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
Spring Boot 和 Bootstrap 都是非常流行的技术,用于开发 Web 应用程序。下面是一个简单的示例,演示如何使用 Spring Boot 和 Bootstrap 实现用户登录和注册功能。 1. 创建一个 Spring Boot 项目,并添加 Web,Thymeleaf 和 Spring Security 依赖。 2. 在 src/main/resources 目录下创建 application.properties 文件,并配置数据库、端口、日志等信息。 3. 创建一个 User 实体类,用于映射用户信息到数据库。示例代码如下: ``` @Entity @Table(name = "users") public class User { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) private Long id; private String username; private String password; private String email; // 省略 getter 和 setter 方法 } ``` 4. 创建一个 UserRepository 接口,用于操作用户信息。示例代码如下: ``` @Repository public interface UserRepository extends JpaRepository<User, Long> { User findByUsername(String username); } ``` 5. 创建一个 UserService 接口和实现类,用于处理用户信息的业务逻辑。示例代码如下: ``` public interface UserService { void save(User user); User findByUsername(String username); } @Service public class UserServiceImpl implements UserService { @Autowired private UserRepository userRepository; @Override public void save(User user) { userRepository.save(user); } @Override public User findByUsername(String username) { return userRepository.findByUsername(username); } } ``` 6. 创建一个 UserController 类,用于处理用户登录和注册的请求。示例代码如下: ``` @Controller public class UserController { @Autowired private UserService userService; @GetMapping("/login") public String login() { return "login"; } @GetMapping("/register") public String register(Model model) { model.addAttribute("user", new User()); return "register"; } @PostMapping("/register") public String register(@ModelAttribute("user") User user) { userService.save(user); return "redirect:/login"; } } ``` 7. 创建一个 login.html 文件和 register.html 文件,用于显示登录和注册页面。示例代码如下: login.html ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Login</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row justify-content-center mt-5"> <div class="col-md-6"> <div class="card"> <div class="card-header">Login</div> <div class="card-body"> <form th:action="@{/login}" method="post"> <div class="form-group"> <label for="username">Username:</label> <input type="text" class="form-control" id="username" name="username" required> </div> <div class="form-group"> <label for="password">Password:</label> <input type="password" class="form-control" id="password" name="password" required> </div> <button type="submit" class="btn btn-primary">Login</button> </form> </div> </div> </div> </div> </div> </body> </html> ``` register.html ``` <!DOCTYPE html> <html xmlns:th="http://www.thymeleaf.org"> <head> <meta charset="UTF-8"> <title>Register</title> <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/4.6.0/css/bootstrap.min.css"> </head> <body> <div class="container"> <div class="row justify-content-center mt-5"> <div class="col-md-6"> <div class="card"> <div class="card-header">Register</div> <div class="card-body"> <form th:action="@{/register}" method="post" th:object="${user}"> <div class="form-group"> <label for="username">Username:</label> <input type="text" class="form-control" id="username" name="username" th:field="*{username}" required> </div> <div class="form-group"> <label for="password">Password:</label> <input type="password" class="form-control" id="password" name="password" th:field="*{password}" required> </div> <div class="form-group"> <label for="email">Email:</label> <input type="email" class="form-control" id="email" name="email" th:field="*{email}" required> </div> <button type="submit" class="btn btn-primary">Register</button> </form> </div> </div> </div> </div> </div> </body> </html> ``` 8. 启动应用程序,访问 http://localhost:8080/register,输入用户名、密码和电子邮件地址,点击注册按钮,即可将用户信息保存到数据库。然后访问 http://localhost:8080/login,输入用户名和密码,点击登录按钮,即可登录成功。 上述示例代码仅供参考,实际开发过程可能需要根据具体需求进行修改和优化。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

快乐的小三菊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值