首页 > 其他分享 >SpringBoot配置文件和修改端口

SpringBoot配置文件和修改端口

时间:2023-08-08 12:37:00浏览次数:49  
标签:SpringBoot 配置文件 spring 配置 端口 zzq application properties 属性


我们在上一篇文章中已经运行起了一个简单的基础项目并运行起来了。

SpringBoot简介项目创建和运行使用

但是我们发现简单版的 Spring Boot 项目没有配置文件,定制版的项目有一个配置文件application.properties,我们还可以发现有些Spring Boot的项目使用的是xml或者yml配置文件。
那么 到底怎么样修改相关配置和增加配置属性呢,本章来学习一下,并尝试修改运行的访问端口。

Spring Boot的默认配置

Spring Boot使用“习惯优于配置”(项目中存在大量的配置,此外还内置了一个习惯性的配置,让你无需手动进行配置)的理念让你的项目快速运行起来。所以,我们要想把Spring Boot玩的溜,就要懂得如何开启各个功能模块的默认配置,这就需要了解Spring Boot的配置文件application.properties。
Spring Boot默认配置文件为CLASSPATH下的application.properties。

Spring Boot使用了一个全局的配置文件application.properties,可以放在src/main/resources目录下或者类路径的/config下,总之打包后需要在CLASSPATH下。
Sping Boot的全局配置文件的作用是对一些默认配置的配置值进行修改。

注:如果你工程没有这个application.properties,那就在src/main/java/resources目录下新建一个File,命名为application.properties。

SpringBoot配置文件和修改端口_多环境配置

自定义属性

application.properties提供自定义属性的支持,这样我们就可以把一些常量配置在这里:

com.zzq.name="张小凡"
com.zzq.title="vip"

然后直接在要使用的地方通过注解@Value(value=”${config.name}”)就可以绑定到你想要的属性上面

@RestController
public class UserController {

    @Value("${com.zzq.name}")
    private  String name;
    @Value("${com.zzq.title}")
    private  String title;

    @RequestMapping("/")
    public String hexo(){
        return name+","+title;
    }
}

我们启动工程输入http://localhost:8080 就可以看到打印了”张小凡vip”。

有时候属性太多了,一个个绑定到属性字段上太累,官方提倡绑定一个对象的bean,这里我们建一个ConfigBean.java类,顶部需要使用注解@ConfigurationProperties(prefix = “com.zzq”)来指明使用哪个

@ConfigurationProperties(prefix = "com.zzq")
public class ConfigBean {
    private String name;
    private String title;

    // 省略getter和setter
}

这里配置完还需要在spring Boot入口类加上@EnableConfigurationProperties并指明要加载哪个bean,如果不写ConfigBean.class,在bean类那边添加

@SpringBootApplication
@EnableConfigurationProperties({ConfigBean.class})
public class Application {

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

最后在Controller中引入ConfigBean使用即可,如下:

@RestController
public class UserController {
    @Autowired
    ConfigBean configBean;

    @RequestMapping("/")
    public String hello(){
        return configBean.getName()+configBean.getTitle();
    }
}

参数间引用

在application.properties中的各个参数之间也可以直接引用来使用,就像下面的设置:

com.zzq.name="张小凡"
com.zzq.title="vip"
com.zzq.hello=${com.zzq.name}的title${com.zzq.title}

这样我们就可以只是用hello这个属性就好

使用自定义配置文件

有时候我们不希望把所有配置都放在application.properties里面,这时候我们可以另外定义一个,这里我们取名为test.properties,路径跟也放在src/main/resources下面。 test.properties内容如下:

com.zzq.name="张小凡"
com.zzq.title="vip"

我们新建一个bean类,如下:

@Configuration
@ConfigurationProperties(prefix = "com.zzq") 
@PropertySource("classpath:test.properties")
public class ConfigTestBean {
    private String name;
    private String title;
    // 省略getter和setter
}

这里要注意哦,有一个问题,如果你使用的是1.5以前的版本,那么可以通过locations指定properties文件的位置,这样:

@ConfigurationProperties(prefix = "com.zzq",locations="classpath:test.properties")

但是1.5版本后就没有这个属性了,添加@Configuration和@PropertySource(“classpath:test.properties”)后才可以读取,如上。

随机值配置

配置文件中${random} 可以用来生成各种不同类型的随机值,从而简化了代码生成的麻烦,例如 生成 int 值、long 值或者 string 字符串。

zzq.secret=${random.value}
zzq.number=${random.int}
zzq.bignumber=${random.long}
zzq.uuid=${random.uuid}
zzq.number.less.than.ten=${random.int(10)}
zzq.number.in.range=${random.int[1024,65536]}

外部配置-命令行参数配置

Spring Boot是基于jar包运行的,打成jar包的程序可以直接通过下面命令运行:

java -jar xx.jar

可以以下命令修改tomcat端口号:

java -jar xx.jar --server.port=9090

可以看出,命令行中连续的两个减号–就是对application.properties中的属性值进行赋值的标识。
所以java -jar xx.jar –server.port=9090等价于在application.properties中添加属性server.port=9090。
如果你怕命令行有风险,可以使用SpringApplication.setAddCommandLineProperties(false)禁用它。

不同配置方式的优先级

实际上,Spring Boot应用程序有多种设置途径,Spring Boot能从多重属性源获得属性,包括如下几种:

根目录下的开发工具全局设置属性(当开发工具激活时为~/.spring-boot-devtools.properties)。
测试中的@TestPropertySource注解。
测试中的@SpringBootTest#properties注解特性。
命令行参数
SPRING_APPLICATION_JSON中的属性(环境变量或系统属性中的内联JSON嵌入)。
ServletConfig初始化参数。
ServletContext初始化参数。
java:comp/env里的JNDI属性
JVM系统属性
操作系统环境变量
随机生成的带random.* 前缀的属性(在设置其他属性时,可以应用他们,比如${random.long})
应用程序以外的application.properties或者appliaction.yml文件
打包在应用程序内的application.properties或者appliaction.yml文件
通过@PropertySource标注的属性源
默认属性(通过SpringApplication.setDefaultProperties指定).

这里列表按组优先级排序,也就是说,任何在高优先级属性源里设置的属性都会覆盖低优先级的相同属性,例如我们上面提到的命令行属性就覆盖了application.properties的属性。

配置文件的优先级

application.properties和application.yml文件可以放在以下四个位置:

外置,在相对于应用程序运行目录的/congfig子目录里。

外置,在应用程序运行的目录里

内置,在config包内

内置,在Classpath根目录

同样,这个列表按照优先级排序,也就是说,src/main/resources/config下application.properties覆盖src/main/resources下application.properties中相同的属性,如图:

SpringBoot配置文件和修改端口_配置_02


此外,如果你在相同优先级位置同时有application.properties和application.yml,那么application.properties里的属性里面的属性就会覆盖application.yml。

引入多个xml配置

SpringBoot提倡零配置,即无xml配置,但是在实际项目中,可能有一些特殊要求你必须使用XML配置,这时我们可以通过Spring提供的@ImportResource来加载xml配置。例如:

@ImportResource({"classpath:some-context.xml","classpath:another-context.xml"})

多环境配置

当应用程序需要部署到不同运行环境时,一些配置细节通常会有所不同,最简单的比如日志,生产日志会将日志级别设置为WARN或更高级别,并将日志写入日志文件,而开发的时候需要日志级别为DEBUG,日志输出到控制台即可。

如果按照以前的做法,就是每次发布的时候替换掉配置文件,这样太麻烦了,Spring Boot的Profile就给我们提供了解决方案,命令带上参数就搞定。

命令带参数的方式

在Spring Boot中多环境配置文件名需要满足application-{profile}.properties的格式,其中{profile}对应你的环境标识,比如:

application-dev.properties:开发环境
application-prod.properties:生产环境

想要使用对应的环境,只需要在application.properties中使用spring.profiles.active属性来设置,值对应上面提到的{profile},这里就是指dev、prod这2个。

当然你也可以用命令行启动的时候带上参数:

java -jar xxx.jar --spring.profiles.active=dev

我给不同的环境添加不同的数据库连接spring.data.mongodb.uri,然后根据指定不同的spring.profiles.active来切换使用。

多环境配置的坑

需要注意的的是 多环节配置时需要注意,如果默认的application.properties中有与其他环境配置环境中一样的变量,则会覆盖生效。

如下:

SpringBoot配置文件和修改端口_配置_03

使用命令启动

java -jar xxx.jar --spring.profiles.active=prod

但如果application.properties中有application-prod.properties有的参数,会覆盖生效。

所以 application.properties最好只用来记录共同的属性或者用于指定默认环境

spring.profiles.active=dev

@ Profile注解的方式

除了可以用profile的配置文件来分区配置我们的环境变量,在代码里,我们还可以直接用@Profile注解来进行配置,例如数据库配置,这里我们先定义一个接口

public  interface DBConnector { public  void  configure(); }
分别定义俩个实现类来实现它
/**
  * 开发环境数据库
  */
@Component
@Profile("devdb")
public class DevDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("devdb");
    }
}
/**
 * 生产数据库
 */
@Component
@Profile("proddb")
public class ProdDBConnector implements DBConnector {
    @Override
    public void configure() {
        System.out.println("proddb");
    }
}

通过在配置文件激活具体使用哪个实现类

spring.profiles.active=devdb

然后就可以这么用了

@RestController
@RequestMapping("/task")
public class TaskController {

    @Autowired DBConnector connector ;

    @RequestMapping(value = {"/",""})
    public String hellTask(){

        connector.configure(); //最终打印devdb     
        return "oK";
    }
}

除了spring.profiles.active来激活一个或者多个profile之外,还可以用spring.profiles.include来叠加profile

spring.profiles.active: devdb  
spring.profiles.include: proddb,prodmq

修改端口

在application.properties中添加

server.port=8011

可将tomcat默认端口号修改为8011

如果是application.yml
则使用属性

server:
  port: 8888

常用配置

server.port=9090 # 服务端口号
server.tomcat.uri-encoding=UTF-8 #以Tomcat为web容器时的字符编码
spring.data.mongodb.uri=mongodb://localhost:27017/mydb #mongodb连接

spring.application.name=customer # 应用名称,一般就是项目名称,这个名称在SpringCloud中比较关键
spring.profiles.active=dev #指定当前的活动配置文件,主要用于多环境多配置文件的应用中
spring.http.encoding.charset=UTF-8 #http请求的字符编码
spring.http.multipart.max-file-size=10MB #设置文件上传时单个文件的大小限制
spring.http.multipart.max-request-size=100MB #设置文件上传时总文件大小限制

spring.thymeleaf.prefix=classpath:/templates/ #配置在使用Thymeleaf做页面模板时的前缀,即页面所在路径
spring.thymeleaf.suffix=.html #设置在使用Thymeleaf做页面模板时的后缀
spring.thymeleaf.cache=false #设置在使用Thymeleaf做页面模板时是否启用缓存

spring.mvc.static-path-pattern=/** #设置静态资源的请求路径
spring.resources.static-locations=classpath:/static/,classpath:/public/ #指定静态资源的路径

##以下是使用MySQL数据库的配置
hibernate.dialect=org.hibernate.dialect.MySQL5Dialect #指定数据库方言
hibernate.show_sql=true #是否显示sql语句
hibernate.hbm2dll.auto=update #设置使用Hibernate的自动建表方式
entitymanager.packagesToScan=com.zslin #设置自动扫描的包前缀

spring.datasource.url=jdbc:mysql://localhost:3306/customer?\
useUnicode=true&characterEncoding=utf-8&useSSL=true&autoReconnect=true #数据库链接
spring.datasource.username=root #数据库用户名
spring.datasource.password=123 #数据库用户对应的密码
spring.datasource.driver-class-name=com.mysql.jdbc.Driver #数据库驱动名称

hibernate.hbm2dll.auto有几种配置:
create:每次加载Hibernate时都会删除上一次生成的表,然后重新生成新表,即使两次没有任何修改也会这样执行,这就导致每次启动都是一个新的数据库,也是导致数据丢失的重要原因。
create-drop:每次加载Hibernate时都会生成表,但当SessionFactory关闭时,所生成的表将自动删除。
update:最常用的属性值,第一次加载Hibernate时创建数据表(前提是需要先有数据库),以后加载HIbernate时只会根据model更新,即使model已经删除了某些属性,数据表也不会随之删除字段。
validate:每次加载Hibernate时都会验证数据表结构,只会和已经存在的数据表进行比较,根据model修改表结构,但不会创建新表。


标签:SpringBoot,配置文件,spring,配置,端口,zzq,application,properties,属性
From: https://blog.51cto.com/u_16218512/7007074

相关文章

  • CentOS 查询端口占用情况
    使用netstat命令:netstat-tuln|grep<端口号>将<端口号>替换为你要查询的端口号。例如,如果你要查询端口80的占用情况,可以输入:netstat-tuln|grep80上述命令将列出所有占用端口80的进程和其PID。使用lsof命令:lsof-i:<端口号>将<端口号>替换为你要查询的端......
  • Nginx 体系化之配置文件重载(平滑升级)原理
    Nginx作为一款高性能的开源Web服务器,以其出色的性能和灵活的配置而备受青眯,在Nginx中,配置文件有着决定性的作用,而配置文件的重载机制更是保障系统稳定运行的关键。本文将讲解一下Nginx配置文件重载的核心原理,以及讲述实际场景的应用Nginx配置文件重载原理1.Nginx配置文件......
  • springboot的AOP整理总结
    aop是spring的两大功能模块之一,功能非常强大,为解耦提供了非常优秀的解决方案。现在就以springboot中aop的使用来了解一下aop。一:使用aop来完成全局请求日志处理pom文件如下:<?xmlversion="1.0"encoding="UTF-8"?><projectxmlns="http://maven.apache.org/POM/4.0.0"xmln......
  • springboot中的缓存介绍
    前言Spring框架支持透明地向应用程序添加缓存对缓存进行管理,其管理缓存的核心是将缓存应用于操作数据的方法(包括增删查改等),从而减少操作数据的执行次数(主要是查询,直接从缓存中读取数据),同时不会对程序本身造成任何干扰。SpringBoot继承了Spring框架的缓存管理功能,通过使用@Enable......
  • springboot中redis作为缓存使用
    springboot中redis作为缓存使用springboot中的redis作为缓存使用application.yamlserver:port:8089#servlet:#context-path:/demoRedis1spring:redis:host:127.0.0.1port:6379password:pom文件<!--添加的依赖--><!--Redis......
  • 通过vcenter提取主机配置文件方式修改esxi root密码
    1,登陆vcenter2,右击任意一台主机-->主机配置文件-->提取主机配置文件3,为新的主机配置命名,如change-passwd4,选择vcenter管理菜单-->策略与配置文件,修改主机配置文件5,编辑主机配置文件-->编辑-->搜索root-->去掉其它选项-->在密码类型中选择固定的密码配置-->保存(这一步要一定小心,不......
  • SpringBoot学习
    SpringBoot学习1.SpringBoot入门1.1SpringbootWeb项目pom.xml基本配置 <properties> <java.version>1.8</java.version> </properties> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot......
  • springboot集成seata1.5.2+nacos2.1.1
    一、前言Seata出现前,大部分公司使用的都是TCC或者MQ(RocketMq)等来解决分布式事务的问题,TCC代码编写复杂,每个业务均需要实现三个入口,侵入性强,RocketMQ保证的是最终一致性。二、环境准备1、nacos:(这里采用最新版本2.1.1)下载地址:https://github.com/alibaba/nacos/releases......
  • java @Value重配置文件中获取不同的值
    在Java中,使用`@Value`注解可以从配置文件中获取不同的值。`@Value`注解可以用于类的字段或方法的参数上。首先,确保在Spring应用程序中正确配置了配置文件。通常,配置文件的名称为`application.properties`或`application.yaml`,并位于类路径下。接下来,您可以在需要获取配置值的类或方......
  • springboot智能3D导诊系统源码,基于规则模板的开发原理
    互联网智慧3D导诊系统源码通过智能导诊,进行自助问询及挂号服务,减轻导诊台护士压力,挂号更加方便快捷。技术架构:springboot+redis+mybatisplus+mysql+RocketMQ  智慧导诊系统开发原理导诊系统从原理上大致可分为基于规则模板和基于数据模型两类。1、基于规则推理的方法通过人工建......