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

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

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

收录于:152天前

配置文件数据的装配

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的名称

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

. . .

相关推荐

额外说明

业务数字化和数据商业化

业务数据化,数据业务化,来源阿里 业务数据化   业务以数据的形式实现计算机化,也就是业务的线上化,电脑化,实现业务的可视。 数据业务化  数据反哺业务,数据创造价值。创建新的业务模式,改进运营效率

额外说明

SpringBoot+Shiro+Jwt+Vue+elementUI实现前后端分离单系统Demo

记录一下使用SpringBoot集成Shiro框架和Jwt框架实现前后端分离Web项目的过程,后端使用SpringBoot整合Shiro+Jwt(auth0),前端使用vue+elementUI框架,前后端的交互使用的是jwt的token,shiro的会

额外说明

SpringData JPA多表查询返回自定义的实体

      转:https://blog.csdn.net/hyljun/article/details/88572091     在使用SpringData JPA查询的时候,一般都是返回Entity相关的结果。前段时间,在开发的 时候遇到了2个表联合

额外说明

eclipse下载并安装

一、官网下载 1. 进入官网 下载链接:https://www.eclipse.org/downloads/ 2. 选择操作系统: 3. 开始下载: 4. 下载中: 5. 解压: 二、配置运行所需环境 其实就是JDK安装和系统变量配置,详细内容可以看我之

额外说明

问题 E: 猴子选大王

题目描述 n只猴子围坐成一个圈,按顺时针方向从1到n编号。然后从1号猴子开始沿顺时针方向从1开始报数,报到m的猴子出局,再从刚出局猴子的下一个位置重新开始报数,如此重复,直至剩下一个猴子,它就是大王。 输入 输入两个整数n和m,1<=m<=n<=100。

额外说明

MYSQL的多版本并发控制MVCC(Multi-Version Concurrency Control)

1、概述 MVCC是一种用于数据库管理系统的并发控制技术,允许多个事务同时访问数据库,而不会导致读写冲突。也就是说在读写的时候,线程不用去争抢读写锁。因为加锁的过程比较耗性能。 当然很多时候还是必须的,不能避免,比如说,去ATM机取钱的时候,同时又在手机

额外说明

js中让字符串中特定字符(数字标识)红色显示

最近项目遇到描述文字中的数字红色显示,于是列出代码: var str = "今日完成率20%"; var num_str =str.replace(/^[^\d]*(\d+)[^\d]*$/, "$1"); //截取数字 var index =str

额外说明

解决mfcm80.dll丢失问题

其实很多用户玩单机游戏或者安装软件的时候就出现过这种问题,如果是新手第一时间会认为是软件或游戏出错了,其实并不是这样,其主要原因就是你电脑系统的该dll文件丢失了或者损坏了,这时你只需下载这个mfcm80.dll文件进行安装(前提是找到适合的版本),当我

额外说明

减少cookie传输_如何使用Cookie减少WordPress垃圾评论

减少cookie传输 A growing site comes with new challenges and one of them is 垃圾评论. Thankfully, there are plenty of solutions to effec

额外说明

Ubuntu 20.04下搭建单机伪分布式Hadoop

JDK环境配置 Hadoop需要JDK环境安装和配置: https://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html官网下载Linux的版本如jd

ads via 小工具