grails配置文件扩展

2023-10-16 05:38
文章标签 扩展 配置文件 grails

本文主要是介绍grails配置文件扩展,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

首先注意一个问题:DataSource.groovy在打包后,war包里存在的是DataSource.class文件。我拿着这个文件让部署人员部署,他问我数据库配置在哪啊?我傻眼了,是啊,他咋修改数据库配置啊?不能每次都要我改好了打包发给他吧。怎么解决,google,google......。

阅读grails文档配置文件相关部分,得到如下解决方案:

首先修改conf.groovy:

environments {
    development {
        runningMode = 'DEV'
        grails.logging.jul.usebridge = true
        grails.config.locations = ["classpath:datasource_dev.properties"]
    }
    production {
        runningMode = 'PRO'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_pro.properties"]
    }
    systemTest {
        runningMode = 'SYSTEM TEST'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_systest.properties"]
    }
}

然后在conf下新建3个文件。

datasource_dev.properties文件内容如下(其余类似):

dataSource.url = jdbc:postgresql://localhost:5432/PhotoManage
dataSource.username=root
dataSource.password=123456
dataSource.dbCreate=update

说明:

(1)grails的配置文件是可以扩展的,定义在datasource_**.properties中的信息会在程序启动时自动读入。

(2)datasource_**.properties内容的书写规则:很简单,安装Config.groovy的结构来就行。例如

Config.groovy中有这样的结构

A{

  B{

    C{

        D.E="haha"

    }

  }

}

那么到了properties文件中就是A.B.C.D.E=haha。

OK,properties文件在打包时不会变成class文件,部署的哥们可以直接改。就不用麻烦我了。搞定。

过了一段时间,程序出问题了。我跑部署人员那跟他说,你该一下日志级别,打印一下调试级别的信息,我看看那出问题了。他问我在哪改啊?然后我又傻眼了,日志的配置在Config.class中,咋改?

这不和数据库配置一样吗?照样来不就行了。回去我就打算把配置信息也挪到properties文件中。可我看了一下配置信息,好复杂啊,转换成properties也太麻烦了,还容易出错。咋整?google,google....解决方案如下:

首先,修改conf.groovy:

environments {
    development {
        runningMode = 'DEV'
        grails.logging.jul.usebridge = true
        grails.config.locations = ["classpath:datasource_dev.properties","file:${basedir}/grails-app/conf/log4jConf.groovy"]
    }
    production {
        runningMode = 'PRO'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_pro.properties","classpath:log4jConf.groovy"]
    }
    systemTest {
        runningMode = 'SYSTEM TEST'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_systest.properties","classpath:log4jConf.groovy"]
    }
}

然后在conf下新建文件log4jConf.groovy。log4jConf.groovy中的内容就是conf.groovy中日志配置的内容。

最后,在BuildConfig.groovy中添加:

grails.war.resources = { stagingDir, args ->
    copy(todir: "${stagingDir}/WEB-INF/classes"){
        fileset(dir:"grails-app/conf",includes:"log4jConf.groovy")
    }
}

保证打包时,war文件中包含log4jConf.groovy。

注意:development下,用"file:${basedir}/grails-app/conf/log4jConf.groovy"引入文件。


其实,datasource_**.properties文件也可以以groovy的文件形式引入。groovy比properties优势的地方是可以编写scrpit来实现较复杂的逻辑。

有过了一段时间,项目有新需求,要用到jms。我用的是ActiveMQ:

首先,引入jar包。

然后,在resource.groovy中配置相关bean:

//OMS Queue
    accounting(org.apache.activemq.command.ActiveMQQueue,"accounting"){}
    omsQueue(org.apache.activemq.command.ActiveMQQueue,"oms-queue"){}

    jmsConnectionFactory(org.apache.activemq.ActiveMQConnectionFactory ){
    }
    cachingConnectionFactory(org.springframework.jms.connection.CachingConnectionFactory){
        targetConnectionFactory=ref("jmsConnectionFactory")
        sessionCacheSize="1"
    }    
    jmsTemplate(org.springframework.jms.core.JmsTemplate){
        connectionFactory=ref("jmsConnectionFactory")
    }
    
    omsQueueListenerContainer(org.springframework.jms.listener.DefaultMessageListenerContainer){
        connectionFactory=ref("cachingConnectionFactory")
        destination=ref("accounting")
        messageListener=ref("omsQueueListener")
        errorHandler=ref("jmsErrorProcessor")
        //exceptionListener=ref("")
        pubSubNoLocal=true
        sessionTransacted=true
        //control the consumption load
        concurrentConsumers=1
        maxConcurrentConsumers=1
        cacheLevelName="CACHE_CONSUMER"
        acceptMessagesWhileStopping=false
    }
    omsQueueListener(com.eternal.finance.business.produce.OmsQueueListener){
        waitProduceOrderService=ref("waitProduceOrderService")//处理等待生产订单的service
        producedJobService=ref("producedJobService")//处理生产完成的job的service
    }

    omsQueueProducer( com.eternal.finance.business.produce.OmsQueueProducer){//发送处理结果
                jmsTemplate=ref("jmsTemplate")
                omsQueue=ref("omsQueue")
    }

这里,可以看到jmsConnectionFactory的配置中,需要的url,用户名,密码等属性都没有。因为这些也是要部署人员可以修改的,我这次聪明了,直接这些属性的配置挪了出来,参照datasource_**.properties,新建了jmsconnection_**.properties 3个文件。内容如下:

beans.jmsConnectionFactory.brokerURL=tcp://localhost:61616
beans.jmsConnectionFactory.userName=admin
beans.jmsConnectionFactory.password=admin
当然,还要修改config.groovy,将3个文件就引入:

environments {
    development {
        runningMode = 'DEV'
        grails.logging.jul.usebridge = true
        grails.config.locations = ["classpath:datasource_dev.properties","file:${basedir}/grails-app/conf/log4jConf.groovy","classpath:jmsconnection_dev.properties"]
    }
    production {
        runningMode = 'PRO'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_pro.properties","classpath:log4jConf.groovy","classpath:jmsconnection_pro.properties"]
    }
    systemTest {
        runningMode = 'SYSTEM TEST'
        grails.logging.jul.usebridge = false
        grails.config.locations = ["classpath:datasource_systest.properties","classpath:log4jConf.groovy","classpath:jmsconnection_systest.properties"]
    }
}
对resource.groovy进行扩展遵循的规则和扩展config.groovy是一样的,内容的写法也一样。

最后说一点:扩展文件里的配置会覆盖原有的配置(如果原有配置没有去掉的话)。

OK,全部搞定,可以交给部署的兄弟部署了。

这篇文章介绍的是配置文件的扩展和这样扩展的原因以及具体如何做。上边的例子只是我的方式,关键还是掌握扩展的原则,掌握了原则你就能按照自己的需要随心所欲的扩展配置文件了。

关于配置文件的官方文档看这里:http://grails.org/doc/latest/guide/conf.html#configExternalized

这篇关于grails配置文件扩展的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219397

相关文章

python3 gunicorn配置文件的用法解读

《python3gunicorn配置文件的用法解读》:本文主要介绍python3gunicorn配置文件的使用,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录python3 gunicorn配置文件配置文件服务启动、重启、关闭启动重启关闭总结python3 gun

Spring Boot 配置文件之类型、加载顺序与最佳实践记录

《SpringBoot配置文件之类型、加载顺序与最佳实践记录》SpringBoot的配置文件是灵活且强大的工具,通过合理的配置管理,可以让应用开发和部署更加高效,无论是简单的属性配置,还是复杂... 目录Spring Boot 配置文件详解一、Spring Boot 配置文件类型1.1 applicatio

Java常用注解扩展对比举例详解

《Java常用注解扩展对比举例详解》:本文主要介绍Java常用注解扩展对比的相关资料,提供了丰富的代码示例,并总结了最佳实践建议,帮助开发者更好地理解和应用这些注解,需要的朋友可以参考下... 目录一、@Controller 与 @RestController 对比二、使用 @Data 与 不使用 @Dat

SpringBoot3使用Jasypt实现加密配置文件

《SpringBoot3使用Jasypt实现加密配置文件》这篇文章主要为大家详细介绍了SpringBoot3如何使用Jasypt实现加密配置文件功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编... 目录一. 使用步骤1. 添加依赖2.配置加密密码3. 加密敏感信息4. 将加密信息存储到配置文件中5

SpringBoot中配置文件pom.xml的使用详解

《SpringBoot中配置文件pom.xml的使用详解》SpringBoot的pom.xml文件是Maven项目的核心配置文件,用于定义项目的依赖、插件、构建配置等信息,下面小编就来和大家详细介绍一... 目录1. 基本结构2. 关键部分详解2.1 <modelVersion>2.2 项目坐标2.3 <p

Spring组件初始化扩展点BeanPostProcessor的作用详解

《Spring组件初始化扩展点BeanPostProcessor的作用详解》本文通过实战案例和常见应用场景详细介绍了BeanPostProcessor的使用,并强调了其在Spring扩展中的重要性,感... 目录一、概述二、BeanPostProcessor的作用三、核心方法解析1、postProcessB

Python中配置文件的全面解析与使用

《Python中配置文件的全面解析与使用》在Python开发中,配置文件扮演着举足轻重的角色,它们允许开发者在不修改代码的情况下调整应用程序的行为,下面我们就来看看常见Python配置文件格式的使用吧... 目录一、INI配置文件二、YAML配置文件三、jsON配置文件四、TOML配置文件五、XML配置文件

JAVA系统中Spring Boot应用程序的配置文件application.yml使用详解

《JAVA系统中SpringBoot应用程序的配置文件application.yml使用详解》:本文主要介绍JAVA系统中SpringBoot应用程序的配置文件application.yml的... 目录文件路径文件内容解释1. Server 配置2. Spring 配置3. Logging 配置4. Ma

spring6+JDK17实现SSM起步配置文件

《spring6+JDK17实现SSM起步配置文件》本文介绍了使用Spring6和JDK17配置SSM(Spring+SpringMVC+MyBatis)框架,文中通过示例代码介绍的非常详细,对大家的... 目录1.配置POM文件2.在resource目录下新建beans.XML文件,用于配置spirng3

Mysql8.0修改配置文件my.ini的坑及解决

《Mysql8.0修改配置文件my.ini的坑及解决》使用记事本直接编辑my.ini文件保存后,可能会导致MySQL无法启动,因为MySQL会以ANSI编码读取该文件,解决方法是使用Notepad++... 目录Myhttp://www.chinasem.cnsql8.0修改配置文件my.ini的坑出现的问题