精华内容
下载资源
问答
  • tomcat读取外部配置文件

    千次阅读 2019-04-25 10:17:15
    步骤一: maven install 命令打包项目war包 步骤二: 新建文件夹如图,config是后面要存放配置文件的 ...修改tomcat conf/catalina.properties 将配置文件路径加入common.loader 步骤五: 启动...

    步骤一: maven install 命令打包项目war包

    步骤二:

     

     

    新建文件夹如图,config是后面要存放配置文件的

    步骤三:

    修改tomcat conf/server.xml

    不自动解压war包 不自动部署war

     

    步骤四:

    修改tomcat conf/catalina.properties 将配置文件路径加入common.loader

     

    步骤五:

    启动tomcat的startup.bat,查看黑窗口信息,以及logs目录下的log日志(默认情况),如果都没有报错,那就可以通过接口或其他形式验证项目是否启动正常,另外在log中也要注意加载配置文件的路径是否正确

     

     

    注意: datasource是父目录,这个必须和你读取文件时的路径是一致的

     

     

     

    展开全文
  • -- 打包为war包,部署在tomcat容器启动 --> <packaging>war</packaging> <parent> <groupId>org.springframework.boot</groupId> <artifactId>...
    • 项目结构

     

     

    • pom.xml
        <!-- 打包为war包,部署在tomcat容器启动 -->
        <packaging>war</packaging>
    
    	<parent>
    		<groupId>org.springframework.boot</groupId>
    		<artifactId>spring-boot-starter-parent</artifactId>
    		<version>2.1.4.RELEASE</version>
    		<relativePath /> <!-- lookup parent from repository -->
    	</parent>
    
    	<properties>
    		<java.version>1.8</java.version>
    	</properties>
    
    	<dependencies>
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-web</artifactId>
    			<exclusions>
                    <exclusion>
                        <groupId>org.springframework.boot</groupId>
                        <artifactId>spring-boot-starter-tomcat</artifactId>
                    </exclusion>
                </exclusions>
    		</dependency>
    
    		<dependency>
    			<groupId>org.springframework.boot</groupId>
    			<artifactId>spring-boot-starter-test</artifactId>
    			<scope>test</scope>
    			<exclusions>
    				<exclusion>
    					<groupId>org.junit.vintage</groupId>
    					<artifactId>junit-vintage-engine</artifactId>
    				</exclusion>
    			</exclusions>
    		</dependency>
    		
    		
    		<!-- jsp支持开启 -->  
            <dependency>
                <groupId>org.apache.tomcat.embed</groupId>
                <artifactId>tomcat-embed-jasper</artifactId>
            </dependency>
            <!-- servlet支持开启,上面exclusions掉tomcat后必须加这个 -->
            <dependency>
                <groupId>javax.servlet</groupId>
                <artifactId>javax.servlet-api</artifactId>
            </dependency>
    		
    	</dependencies>
    
    	<build>
            <!-- 访问url中的项目名 -->
    		<finalName>outconfig-demo</finalName>
    		<plugins>
    			<plugin>
    				<groupId>org.apache.maven.plugins</groupId>
    				<artifactId>maven-war-plugin</artifactId>
                <configuration>
                    <failOnMissingWebXml>false</failOnMissingWebXml>
                </configuration>
    			</plugin>
    		</plugins>
    	</build>
    

     

    • 启动类,App
    @SpringBootApplication
    public class App {
    	public static void main(String[] args) {
    		SpringApplication.run(App.class, args);
    	}
    }
    • 配置tomcat 启动读取外部文件
    public class AppConfig extends SpringBootServletInitializer  {
    	@Override
    	protected SpringApplicationBuilder configure(SpringApplicationBuilder builder) {
    		return builder.sources(App.class);
    	}
    }
    
    • 获取属性并赋值,指定参数
    @Configuration
    @PropertySource("file:${mypath.config}/application.properties")
    public class DemoConfig {
    	
    	@Value("${user.username}")
    	private String key;
    	
    	@Value("${user.password}")
    	private String value;
    
    	public String getKey() {
    		return key;
    	}
    
    	public void setKey(String key) {
    		this.key = key;
    	}
    
    	public String getValue() {
    		return value;
    	}
    
    	public void setValue(String value) {
    		this.value = value;
    	}
    
    	@Override
    	public String toString() {
    		return "DemoConfig [key=" + key + ", value=" + value + "]";
    	}
    
    }
    
    •  controller测试类,预期打印出DemoConfig内容
    @Controller
    @RequestMapping("/test")
    public class TestController {
    
    	@Autowired
    	private DemoConfig demoConfig;
    	
    	@RequestMapping("/getConfig")
    	@ResponseBody
    	public String getConfig() {
    		return demoConfig.toString();
    	}
    }
    
    •  项目下的application.properties
    spring.profiles.active=outConfig

     

     


    windows环境下:

    • D:\test 路径下编辑 application.properties
    user.username=qhf
    user.password=abcdefg
    

     

    • eclipse 启动 tomcat,添加参数

    •  启动tomcat

    • 运行测试

     


    linux 环境下:

    • 打成 war 包上传到 tomcat 的 webapps 目录下:run as Maven build

     

    • vim /app/tomcat/tomcat-8080/bin/setenv.sh
    #!/bin/bash
    
    JAVA_HOME=/usr/local/jdk1.8.0_191
    
    CATALINA_HOME=/app/tomcat/tomcat-8080
    
    CATALINA_PID=/app/tomcat/tomcat-8080/bin/tomcat.pid
    
    JAVA_OPTS="-server -Dfile.encoding=UTF-8 -Djava.awt.headless=true"
    JAVA_OPTS="$JAVA_OPTS -server -Xms2G -Xmx2G -XX:MaxNewSize=512m -XX:MaxMetaspaceSize=512m -XX:MetaspaceSize=512m"
    
    JAVA_OPTS="$JAVA_OPTS -Dmypath.config=/home/qhf"

     

    • 运行 tomcat

    • 访问测试

     

     

    展开全文
  • 我的项目使用场景起因是: 在同一台机器上起了两个tomcat实例, 每个项目的日志文件打印路径要配成不同, 如果每次打包手动修改打印日志的路径太费时费力, 所以考虑把配置文件每个tomcat放一份, 启动时自动读取当前...

    1. springboot支持动态的读取文件,扩展接口:org.springframework.boot.env.EnvironmentPostProcessor

    我的项目使用场景起因是: 在同一台机器上起了两个tomcat实例, 每个项目的日志文件打印路径要配成不同, 如果每次打包手动修改打印日志的路径太费时费力, 所以考虑把配置文件每个tomcat放一份, 启动时自动读取当前tomcat文件下的配置就好.

    2. 我这里的自定义配置文件存放路径: tomcat的conf文件夹下面

    3. application.properties配置文件内容(我这里不同tomcat配置参数值不同)

    spring.profiles.active=test
    4. 定义MyEnvironmentPostProcessor实现EnvironmentPostProcessor接口

    package com.hlz.web.common.config;
     
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.env.EnvironmentPostProcessor;
    import org.springframework.core.env.ConfigurableEnvironment;
    import org.springframework.core.env.MutablePropertySources;
    import org.springframework.core.env.PropertiesPropertySource;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.support.PropertiesLoaderUtils;
     
    import javax.servlet.ServletContextEvent;
    import java.io.File;
    import java.io.IOException;
    import java.util.Properties;
     
    public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
     
     
        @Override
        public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication application) {
            //tomcat路径
            String property = System.getProperty("catalina.home");
            System.out.println("catalinahome:"+property);
     
            String path =property+File.separator+"conf"+File.separator+"myspringboot.properties";
            File file = new File(path);
            System.out.println("Loading local settings from : "+path);
     
            if (file.exists()) {
                MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
                Properties properties = loadProperties(file);
                System.out.println(properties.toString());
                propertySources.addFirst(new PropertiesPropertySource("Config", properties));
            }
        }
     
        private Properties loadProperties(File f) {
            FileSystemResource resource = new FileSystemResource(f);
            try {
                return PropertiesLoaderUtils.loadProperties(resource);
            } catch (IOException ex) {
                throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
            }
        }
    }
     
    5. 在classpath定义一个META-INF文件夹然后在其下面先建spring.factories文件,在其中指定:

    org.springframework.boot.env.EnvironmentPostProcessor=com.hlz.web.common.config.MyEnvironmentPostProcessor

     

     

    启动工程


    6. 如果同一个参数, application.yml中有定义, 外部配置文件也有定义, 以哪一个为准呢,

    //以配置文件为准 
    propertySources.addFirst(new PropertiesPropertySource("Config", properties));
     
    //以application.yml中的文件为准
     propertySources.addLast(new PropertiesPropertySource("Config", properties));
    7.一些官网的关于EnvironmentPostProcessor的说明

    Allows for customization of the application's Environment prior to the application context being refreshed.
     
    EnvironmentPostProcessor implementations have to be registered in META-INF/spring.factories, using the fully qualified name of this class as the key.
     
    EnvironmentPostProcessor processors are encouraged to detect whether Spring's Ordered interface has been implemented or if the @Order annotation is present and to sort instances accordingly if so prior to invocation.
     

     

    升级版的属性读取解析器:

    package com.kiiik.config;
    
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.util.Properties;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.env.EnvironmentPostProcessor;
    import org.springframework.core.env.ConfigurableEnvironment;
    import org.springframework.core.env.MutablePropertySources;
    import org.springframework.core.env.PropertiesPropertySource;
    import org.springframework.core.io.FileSystemResource;
    import org.springframework.core.io.support.PropertiesLoaderUtils;
    import org.springframework.util.StringUtils;
    
    public class MyEnvironmentPostProcessor implements EnvironmentPostProcessor {
    
    	/* -Dprotect.config.dir=d:/data/test
    	 * -Dspring.config.location=d:/data/test
    	 * */
    	String baseFileName= "application.properties";
    	
    	@Override
    	public void postProcessEnvironment(ConfigurableEnvironment configurableEnvironment, SpringApplication application) {
    		String selfDefinedDir = System.getProperty("project.config.dir");
    		String springConfigDir= System.getProperty("protect.config.dir");
    		String tomcatHome = null;
    		String configFileDir="";
    		if(!StringUtils.isEmpty(springConfigDir))//启动参数获取目录,只要指定 肯定有。
    		{
    			configFileDir = springConfigDir;//优先级最高100
    		}else{
    			if(!StringUtils.isEmpty(selfDefinedDir)){//优先级 99
    				configFileDir = selfDefinedDir;
    			}
    			
    		}
    		if(configFileDir == null){//没有自定义目录
    			// tomcat路径
    			if(!StringUtils.isEmpty(System.getProperty("catalina.home"))){
    				tomcatHome = System.getProperty("catalina.home");//优先级98
    				String projectName = System.getProperty("project.name");
    				if(StringUtils.isEmpty(projectName))
    					try {
    						throw new Exception("工程名不能为空,请添加-Dproject.name属性");
    					} catch (Exception e) {
    						e.printStackTrace();
    					}
    				String relativePath = File.separator + projectName + File.separator ;
    				configFileDir = tomcatHome+relativePath;
    			}else{//tomcat也没有定义默认目录,读取工程目录同级的配置文件
    				String projectName = System.getProperty("project.name");
    				if(StringUtils.isEmpty(projectName))
    					try {
    						throw new Exception("工程名不能为空,请添加-Dproject.name属性");
    					} catch (Exception e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}
    				//读取应用同级目录下的工程名目录下的配置文件
    				configFileDir = System.getProperty("user.dir") + File.separator+projectName+ File.separator;//读取应用同级目录下的工程名目录下的配置文件
    				File[] proDirfiles = new File(configFileDir).listFiles();
    				if(proDirfiles.length==0){//优先级97
    					//classpath目录下配置文件
    					File clsPath;
    					try {
    						clsPath = org.springframework.util.ResourceUtils.getFile("classpath:");
    						configFileDir = clsPath.getAbsolutePath()+ File.separator;
    					} catch (FileNotFoundException e) {
    						// TODO Auto-generated catch block
    						e.printStackTrace();
    					}//优先级96
    				}
    			}
    		}
    		if(!configFileDir.endsWith("/")&&!configFileDir.endsWith("\\")){
    			configFileDir = configFileDir.concat(File.separator);
    		}
    		System.out.println("configFileDir:" + configFileDir);
    		MutablePropertySources propertySources = configurableEnvironment.getPropertySources();
    		Properties appProperties = loadProperties(new File(configFileDir+baseFileName));
    		propertySources.addFirst(new PropertiesPropertySource("Config", appProperties));
    		File[] files = new File(configFileDir).listFiles();
    		if(files.length ==0)
    			try {
    				throw new Exception("没有发现配置文件!");
    			} catch (Exception e) {
    				e.printStackTrace();
    			}
    		for(int i=0;i<files.length;i++){
    			if(files[i].getName().contains("properties")&&!baseFileName.equals(files[i].getName())){
    				System.out.println("load setting file :"+files[i]);
    				propertySources.addFirst(new PropertiesPropertySource(files[i].getName(), loadProperties(new File(configFileDir+files[i].getName()))));
    			}
    		}
    	}
    	private Properties loadProperties(File f) {
    		FileSystemResource resource = new FileSystemResource(f);
    		try {
    			return PropertiesLoaderUtils.loadProperties(resource);
    		} catch (IOException ex) {
    			throw new IllegalStateException("Failed to load local settings from " + f.getAbsolutePath(), ex);
    		}
    	}
    }
    

     

    展开全文
  • 为了使项目配置更加可视化可维护,web项目的配置文件需要动态变更,不能直接写死在war中,就需要我们实现war包可以读取外部配置文件。 二、准备 eclipse、tomcat、maven 三、实现 123456步骤一: maven ...
     一、需求
         为了使项目配置更加可视化可维护,web项目的配置文件需要动态变更,不能直接写死在war中,就需要我们实现war包可以读取外部的配置文件。
     二、准备
      eclipse、tomcat、maven
     三、实现
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    步骤一: maven install 命令打包项目war包

    步骤二: 
    这里写图片描述 
    新建文件夹如图,config是后面要存放配置文件的

    步骤三: 
    修改tomcat conf/server.xml 
    不自动解压war包 不自动部署war 
    这里写图片描述

    步骤四: 
    修改tomcat conf/catalina.properties 将配置文件路径加入common.loader 
    这里写图片描述

    步骤五: 
    启动tomcat的startup.bat,查看黑窗口信息,以及logs目录下的log日志(默认情况),如果都没有报错,那就可以通过接口或其他形式验证项目是否启动正常,另外在log中也要注意加载配置文件的路径是否正确 
    这里写图片描述 
    注意: datasource是父目录,这个必须和你读取文件时的路径是一致的 

    这里写图片描述


    转载自https://blog.csdn.net/Mars93/article/details/78017209


    展开全文
  • 1、在tomcat中webapps目录下放置一个config.properties配置文件;2、在监听的时候读取写入src目录下;3、通过Properties类再次读取,可以在service层获取到,具体代码如下:1、监听类,实现ServletContextListener...
  • 为了使项目配置不受生产、测试、开发环境的影响,且更加可视化可维护配置文件,web项目的配置文件需要根据不同环境配置动态变更,不能直接写死在war中,就需要我们实现war包可以读取外部配置文件。 二、准备 ...
  • spring-boot部署(读取外部配置文件

    千次阅读 2018-06-28 11:25:11
    背景 项目架构基于springboot和...部署时对于配置文件(需要启动时就加载的,比如jdbc,mq,redis等文件)的处理,其实问题还是比较经典的。基本上大部分项目应该都会遇到,处理方式可能各不相同。 一、sprin...
  • 当我们使用springboot开发时,有的时候需要打war包在外部tomcat部署,方便运维人员维护,但是修改配置文件后重新打包给运维的时候,又需要修改一些配置这样还是不方便维护。 在网上找了很多例子但是都是针对....
  • 之所以要从程序中读取外部本地配置文件,是因为在项目已经打包部署的情况下,如果想要改变一些程序中配置的诸如ip,port等可能经常变动的元素,不必去改动源码然后再次打包部署。只需要把这些信息写在配置文件中,...
  • spring配置文件读取外部参数

    千次阅读 2016-02-25 16:39:48
    1,xml文件 classpath*:/url.properties file:${configpath} file:d://test.properties 说明:1:类路径;2:tomcat参数导入(重点说明);3:决绝路径(不支持相对路径) 第二种方法eclipse操作的说明: 如图...
  • 1.问题描述 :一个简单的ssm写的接口服务。... 3.tomcat配置问题。 4.文件读取时没设置编码导致乱码。 3.解决问题: 经过我加断点一一排除,发现时文件读取时没设置编码格式,导致乱码。 此时心里有些郁闷。外部
  • 当遇到多给项目,为了实现统一的数据源管理,我们公司将多个项目的数据源都配置在tomcat配置文件里以实现数据源的统一管理。那么对于springboot这样高度集成的项目,该如何实现读取外部tomcat的数据源功能呢?...
  • 最近在做项目的时候,有一个需求,用户可以上传图片、视频、音频等,这种情况下,如果用户比较多或者用户上传的资源比较大,直接放到服务器中会使服务器的压力增大,...很简单,只需要在Tomcat配置文件server.xml...
  • 今天给一个web项目搭建运行环境,Tomcat和Oracle数据库都先配好了,然后我运行项目的登录页面(login.jsp),页面能显示出来,但是控制台却报出了找不到配置文件的空指针异常(配置文件是有的,并且读取配置文件的...
  • 开发项目时一些功能所需文件必须放在web项目中作为资源文件读取、且该资源文件个数很多、在eclipse中修改业务后通过tomcat重新上传项目会导致资源文件跟着一起上传特别慢、为了避免这种情况发生、又想重启tomcat看到...
  • 在我的Ccmusic项目中由于需要上传图片、歌曲等,所以我将静态资源文件没有放在static文件夹下,而是放在了根目录下,...首先在springboot项目中的application.properties的配置文件中,添加下面的配置 server.tomcat.ba
  • IDEA 配置 tomcat的数据源

    千次阅读 2017-09-07 14:13:20
    1、F4打开module setting面板,找到facets 配置项,这个配置项非常重要,里面可配置tomcat加载的web.xml和context.xml文件所在的路径,部署的时候IDEA会自动读取。(PS:外部导入的项目,也一定要在这里配置好,不然...
  • 以上是架构,在applicationContext.xml中,配置读取jdbc.properties,但是tomcat启动项目时,会出现以下的报错。 applicationContext.xml代码如下: <!-- 引入外部文件读取jdbc.properties --> <...
  • tomcat默认是不开启tomcat链接的,需要手动添加配置项。 在tomcat里的conf/context.xml文件里设置就可以打开软链接,根据tomcat版本不同有不同的设置: JBoss:修改jboss-web.deployer下面的context.xml文件,在C...
  • 首先检查一下路径问题,servlet看一下web.xml里面是否有配置或是否添加了注解。 若都没有问题,看一下tomcat的启动信息,查看是否有报错提示。...去spring的applicationContext.xml里面看一下,配置读取外部propert...
  • tomcatServletWebServerFactory可以用来配置tomcat容器 打成jar包的插件 以war包形式启动(web项目) springboot自动配置 yml配置文件 日期转换器配置 ...外部配置文件读取(非application.yml) 自...
  • config和context

    2018-05-23 01:09:04
    config和context的应用:在servlet中预留参数,我们可以自己写外部配置文件读取,但是自己写比较麻烦,Tomcat做了一些比较好的方法,例如使用web.xml文件来配置参数,使用servletConfig或servletContext来读取。...
  • Spring Boot全套教程.txt

    2019-08-16 16:10:28
    03-实战-读取外部配置文件 04-SpringBoot简介 05-第一个SpringBoot应用 06-SpringBoot核心-核心注解、自动配置、自定义banner 07-全局配置文件 08-starter pom、xml配置、日志 09-SpringBoot的自动配置 10-自动...
  • 传智springboot视频教程

    2018-01-12 10:18:16
    03-实战-读取外部配置文件 04-SpringBoot简介 05-第一个SpringBoot应用 06-SpringBoot核心-核心注解、自动配置、自定义banner 07-全局配置文件 08-starter pom、xml配置、日志 09-SpringBoot的自动配置 10-自动...
  • SpringBoot入门

    2020-02-24 21:30:19
    文章目录SpringBoot1. 什么是SpringBootSpringBoot的特性2.... 读取配置文件的信息5. 配置热部署3. Spring Boot与ActiveMQ整合1. 使用内嵌服务2. 使用外部服务3. 发送map信息 SpringBoot 1. 什么是...

空空如也

空空如也

1 2 3
收藏数 56
精华内容 22
关键字:

tomcat读取外部配置文件