小工具      在线工具  汉语词典  dos游戏  css  js  c++  java

spring boot数据读取、多环境开发、整合第三方bean与数据库等问题

# Spring Boot,spring boot,数据库,java 额外说明

收录于:112天前

配置文件数据的装配

Spring Boot基于完全注解的开发模型,自动读取默认配置文件并组装到IoC容器中。

三种主要阅读方式:

默认配置文件:

method.title=spring boot读取配置文件的三种方式
method.header=three methods
method.one=@ConfigurationProperties读取配置文件并转java类
method.two=@Value读取某个属性
  1. @Value直接读取属性
  2. @ConfigurationProperties读取配置文件,然后在IoC容器中组装成java对象
  3. 环境对象遍历封装

import com.example.demo.pojo.Method;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.core.env.Environment;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
public class TestController {
    

    //@ConfigurationProperties读取配置文件转java对象
    @Autowired
    private Method method;

    //@Value直接读取属性
    @Value("${method.header}")
    private String header;

    //Environment对象遍历读取
    @Autowired
    private Environment environment;


    @GetMapping(value = "/title")
    public String method3(){
    
        String title = method.getTitle();
        return title;
    }

    @GetMapping(value = "/header")
    public String method4(){
    
        return header;
    }

    @GetMapping(value = "/one")
    public String method5(){
    
        return environment.getProperty("method.one");
    }
}

多环境开发

属性文件的多环境开发:

由于spring boot配置文件的读取是基于约定而不是依赖,所以它不会读取一个配置文件,然后就不再读取其他配置文件。所有具有应用程序前缀的内容都将被读取,重复或不同的内容将具有优先级覆盖。 ,命令行和配置参数都会改变配置,那么有以下规则:

  • SpringApplication默认会将命令行选项参数转换为配置信息:
java -jar myproject.jar --server.port = 9000

从命令行指定的配置项具有最高优先级,但您可以通过 setAddCommandLineProperties 禁用它们:

SpringApplication.setAddCommandLineProperties(false)
  • 外部配置

外部配置主要借助idea等工具,通过该工具覆盖配置代码:
在这里插入图片描述

  • 自定义配置文件

自定义配置文件。对于已经上线或编码的应用程序,重新配置、打包和部署会很麻烦。 Spring Boot 改为支持自定义配置文件,即 Spring Boot 可以使用不在项目目录下的配置文件作为主配置文件。

  1. 指定同目录下的配置文件
java -jar myproject.jar --spring.config.location=classpath:/default.properties,classpath:/override.properties
  1. 在任意位置指定配置文件
java -jar -Dspring.config.location=D:\config\config.properties springbootrestdemo-0.0.1-SNAPSHOT.jar 
  1. 也可以在代码中指定
@SpringBootApplication
@PropertySource(value={
    "file:config.properties"})
public class SpringbootrestdemoApplication {
    

    public static void main(String[] args) {
    
        SpringApplication.run(SpringbootrestdemoApplication.class, args);
    }
}
  • 外部配置文件

Spring程序会按照优先级从以下路径加载application.properties配置文件。

  1. 当前目录下的/config目录
  2. 当前目录
  3. 类路径中的 /config 目录
  4. 类路径和目录

因此,添加外部配置文件非常简单。在jar所在目录下新建config文件夹,然后将配置文件放入其中,或者直接将配置文件放入jar目录中。

  • 根据Profile的不同环境读取不同的配置

不同环境的配置设置一个配置文件,例如:

  • dev环境中的配置在application-dev.properties中;
  • prod环境中的配置在application-prod.properties中;
  • 测试环境中的配置在application-test.properties中。

在 application.properties 中指定要使用的文件:

spring.profiles.active = dev

当然,你也可以在运行时手动指定:

java -jar myproject.jar --spring.profiles.active = prod
  • 配置文件存放目录

SpringBoot配置文件默认可以放在以下目录,并且可以自动读取:

  1. 在项目根目录下
  2. 项目根目录下的config目录下
  3. 在项目的resources目录下
  4. 项目资源目录下的config目录下

在这里插入图片描述

  • 配置文件读取顺序
如果在不同的目录中存在多个配置文件,它的读取顺序是:

    1、config/application.properties(项目根目录中config目录下)
    2、config/application.yml
    3、application.properties(项目根目录下)
    4、application.yml
    5、resources/config/application.properties(项目resources目录中config目录下)
    6、resources/config/application.yml
    7、resources/application.properties(项目的resources目录下)
    8、resources/application.yml

注:
1、如果同一个目录下,有application.yml也有application.properties,默认先读取application.properties。
2、如果同一个配置属性,在多个配置文件都配置了,默认使用第1个读取到的,后面读取的不覆盖前面读取到的。
3、创建SpringBoot项目时,一般的配置文件放置在“项目的resources目录下

部分参考来自https://www.jianshu.com/p/e6fe4b8a4893谢谢作者剑音启蒙

中文乱码问题

中文乱码问题主要是后台编码的字符集与浏览器解码的字符集不一致造成的。我如何更改它以保持一致?

  • 方法一(接口声明编码设置)

更改接口处的编码和解码,声明浏览器使用UTF-8字符1进行解码。


@GetMapping(value = "/title", produces = "application/string;charset=UTF-8")
public String method3(){
    
    String title = method.getTitle();
    return title;
}
  • 方法二(更改properties文件的编码格式)
server.servlet.encoding.charset=UTF-8
server.servlet.encoding.force=true
server.servlet.encoding.enabled=true

热部署

每次写完程序后都需要重启服务器,需要大量的时间,spring boot提供了一款工具devtools帮助实现热部署。

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

在这里插入图片描述

导入插件后,每次点击---->Build----->构建项目即可,比重启要快很多。

整合第三方bean

在spring boot中有时需要整合第三框架,需要用到新的bean作为赋值对象,例如在整合driud框架时使用的是druid的DataSource,但spring boot整合了该框架,著需要在配置文件中声明即可:

在这里插入图片描述
但是如果spring boot中没有整合的第三方框架呢,就需要自己通过配置文件注入到IoC容器,再将配置信息注入到该对象中了。

比如说开发者如果不使用这个方法自己集成怎么办?

  1. 创建一个新的配置类
  2. 通过@ConfigurationProperties注入数据即可
@Configuration
public class MyDataSource {
    

    @Bean
    @ConfigurationProperties(prefix = "datasource")
    public DruidDataSource dataSource(){
    
        DruidDataSource dataSource = new DruidDataSource();
        dataSource.setUrl("${url}");
        dataSource.setUsername("${username}");
        dataSource.setPassword("${password}");
        dataSource.setDriverClassName("${com.mysql.jdbc.cj.Driver}");
        return dataSource;
    }
}

Spring boot整合Redis和Mongodb

在这里插入图片描述

在pom文件中添加依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

Spring对redis的操作不像mysql。这很简单。 Spring容器中有一个默认的数据源。因此,无论是mybatis、druid、redis等数据库,都要配置连接该数据库的数据源和驱动。

因此,Redis的操作也非常简单。导入依赖、配置数据源、创建操作对象:

<dependency>
	<groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>
spring.redis.url=localhost


配置好spring jdbc数据源后,使用JdbcTemplate模板,使用@Mapper注解配置mybatis数据源。 Redis中还有一个RedisTemplate模板用于操作redis数据库:


	@Test
    public void method1(){
    
        //普通值操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("hello","Hello World");
        Object hello = valueOperations.get("hello");
        System.out.println(hello);

    }

在这里插入图片描述

redisTemplate对象有很多操作对象都是针对java 不同的数据类型的。在spring boot中使用set,存的数据发现用在redis客户端用get获取不到,原因是在spring boot中是使用redis的内置对象Object来操作的,而在客户端存取时都是字符串,因此无法直接获取,此时就需要另一个对象StringRedisTemplate如下:

   @Test
    public void method1(){
    
        //普通值操作
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("hello","Hello World");
        Object hello = valueOperations.get("hello");
        System.out.println(hello);

    }


    @Test
    public void method2(@Autowired StringRedisTemplate redisTemplate){
    
        ValueOperations valueOperations = redisTemplate.opsForValue();
        valueOperations.set("city","beijing");
        System.out.println(valueOperations.get("city"));

    }

在这里插入图片描述

如果您使用第一个模板来指定范例,您可以

集成 MongoDB
在这里插入图片描述

MongoDB 将数据存储为文档,数据结构由 key=>value 对组成。 MongoDB 文档类似于 JSON 对象。字段值可以包含其他文档、数组和文档数组。

引入 MongoDB 的依赖项:

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
        </dependency>

配置数据源:

spring.data.mongodb.uri=mongodb://localhost/runoob

编写测试类:

插入数据:
在这里插入图片描述

使用java对象作为赋​​值对象来执行分割查询:

    @Test
    public void method1(){
    
        List<Book> all = mongoTemplate.findAll(Book.class,"col");
        System.out.println(all);
    }

//col是集合的名称

代码插入:

    @Test
    public void method2(){
    
        Book book = new Book();
        book.setId(2);
        book.setTitle("hello");
        book.setUrl("http://localhost/hello");
        mongoTemplate.save(book);
        List<Book> all = mongoTemplate.findAll(Book.class);
        System.out.println(all);
    }

//代码插入的时候尽量声明集合名,默认是java bean的名称

在这里插入图片描述
在这里插入图片描述

. . .

相关推荐

额外说明

Mybatis注册TypeHandler及TypeHandler源码流程

在将如何注册TypeHandler之前,我们先通过Mybatis的源码来看看TypeHandler的生成流程。 SqlSessionFactory在实例化时会立即解析Mapper.xml内的xml元素,将其从xml节点解析为相应的Java类,我们先从re

额外说明

【Golang】实用技巧-viper读取配置文件路径的两种方式

-一个不甘平凡的普通人,致力于为Golang社区和算法学习做出贡献,期待您的关注和认可,陪您一起学习打卡!!!--- -专栏:算法学习 -专栏:Go实战 -个人主页:个人主页 文章目录 前言 问题描述 解决 前言 在使用viper去寻找配置文件的时候,老

额外说明

MFC f:\dd\vctools\vc7libs\ship\atlmfc\src\mfc\dlgdata.cpp 行:40

控件的变量有初始化,因为控件都删除了,所以对控件上的变量初始化会报错。

额外说明

MYSQL性能调优06_分页查询优化、JOIN关联查询优化、in和exits优化、count(*)查询优化

文章目录 ①. 分页查询优化 ②. Join关联查询优化 ③. in和exsits优化 ④. count(*)查询优化 ①. 分页查询优化 ①. 坏境准备 表示从表 employees 中取出从 10001 行开始的 10 行记录。看似只查询了 10 条

额外说明

mysql的大版本5.6、5.7、8.0特性比对

一、当前主流的mysql的大版本 当前主流的mysql版本有 5.6、5.7、5.8 二、区别比对 1、5.6对比5.5 1、可以修改未压缩表的 InnoDB 页大小设置为 8KB 或 4KB ,默认是 16KB。 2、InnoDB 的 redo log

额外说明

计算机课遇到游戏,信息技术课玩游戏的现象及想法

信息技术教师每分钟都对学生进行深入浅出的讲解,精心细心的演示示范,辅导学生当堂完成作业,学生的作业让电脑打分后让他们上交到教师的主机上。作业比较简单,只要肯听课并跟着操作就肯定能学到知识和技术。但在电脑游戏狂的洪水猛兽下就是有学生不听课而硬要打电脑游戏。

额外说明

TIDB-分布式关系型数据库讲解

一、传统关系型数据库所面临的问题 根据以往的MySQL使用经验,MySQL单表在 5000 万行以内时,性能较好,单表超过5000万行后,数据库性能、可维护性都会极剧下降。当然这时候可以做MySQL分库分表,比如使用Mycat或Sharding-jdbc

额外说明

第一章:vue2中常见的指令

一、关于vue中指令的介绍 二、关于属性绑定的指令 1、v-bind的使用(绑定html属性的标签) <div id="app"> <p>关于v-bind的使用</p> <p v-bind:title="title">我是标签</p>

额外说明

解决Win系统找不到api-ms-win-core-timezone-l1-1-0.dll问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个api-ms-win-core-timezone-l1-1-0

额外说明

解决api-ms-win-crt-time-l1-1-0.dll在Windows没有找到问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个api-ms-win-crt-time-l1-1-0.dll文

ads via 小工具