(快速参考)

组态

4.0.2

组态

365bet地区看起来很奇怪,在一个包含配置之上的约定的框架中,我们现在解决这个问题。使用365bet地区默认设置,您实际上可以开发应用程序而无需进行任何配置,快速入门演示了这一点,但是了解在何处以及如何覆盖是很重要的需要使用时的约定用户指南的后续部分将提及您可以使用的配置设置,而不是如何进行设置的假设是,您至少已阅读本章的第一部分

基本配置

365bet地区365bet地区中的配置通常分为区域构建配置和运行时配置

构建配置通常是通过Gradle和建立gradle默认情况下,YAML中指定了文件运行时配置grails应用配置会议应用yml文件

365bet地区如果您更喜欢使用365bet地区风格的Groovy配置,则可以使用Groovy指定配置ConfigSlurper语法两个Groovy配置文件可用grails应用配置会议应用程序grails应用程序配置运行时groovy:

  1. 采用应用程序不依赖于应用程序类的配置

  2. 采用运行时常规取决于应用程序类的配置

这种分离是必要的,因为在应用程序365bet地区可用于需要加载的365bet地区 CLI应用程序在应用程序被编译之前对应用程序类的引用应用程序这些命令由CLI执行时将导致异常

365bet地区运行365bet地区 CLI启动时发生错误,脚本groovy无法解析类com foo Bar

对于Groovy配置,以下变量可用于配置脚本

变量 描述

userHome

365bet地区运行365bet地区应用程序的帐户的主目录位置

365bet地区首页

365bet地区安装365bet地区的目录的位置网格首页设置了环境变量

appName

出现在构建gradle中的应用程序名称

appVersion

出现在构建gradle中的应用程序版本

例如

我的tmp目录"${userHome}grails tmp"

365bet地区使用365bet地区Application访问配置

如果要读取运行时配置设置,即在使用grails应用在控制器和标签库中可用作变量的对象

 我的控制器 {
    定义 你好() {
        定义收件人grails应用程序配置getProperty'foo bar你好'渲染"你好${接受者}"
    }
}

配置的属性grails应用对象是的实例设定档接口,并提供了许多有用的方法来读取应用程序的配置

特别是getProperty上面看到的方法对于有效地检索配置属性非常有用,同时指定属性类型的默认类型为String和/或提供默认的后备值

 我的控制器 {

    定义 你好收件人收件人检索Integer属性foo bar max hellos,否则使用的值
        定义最大grails应用程序配置getProperty'foo bar max hellos', 整数, 5)

        不指定类型而检索属性foo bar问候语,默认为String,否则使用值Hello
        定义问候grails应用程序配置getProperty'foo酒吧问候', "你好")

        定义邮件收件人receiveHelloCount max"抱歉,您已获得最多次数" :  "${问候}, ${接受者}"呈现消息

请注意设定档实例是基于Spring的合并配置PropertySource概念,并从环境系统属性和本地应用程序配置中读取配置,并将它们合并为一个对象

365bet地区365bet地区应用365bet地区可以轻松地注入服务和其他365bet地区工件

 365bet地区核心

 我的服务365bet地区365bet地区Application grailsApplication问候定义收件人grails应用程序配置getProperty'foo bar你好')
        返回 "你好${接受者}"
    }
}

365bet地区365bet地区ConfigurationAware接口

在运行时动态访问配置对应用程序性能的影响很小。另一种方法是实现365bet地区365bet地区ConfigurationAware提供一个setConfiguration初始化类时将应用程序配置作为参数接受的方法然后可以将相关的配置属性分配给类上的实例属性,以供以后使用

设定档实例具有与注入实例相同的属性和用法365bet地区应用config对象这是来自上一个示例的服务类,使用365bet地区ConfigurationAware而不是注射365bet地区应用:

 365bet地区grails核心支持365bet地区ConfigurationAware

 我的服务 实施365bet地区365bet地区ConfigurationAware接受者问候返回 "你好${接受者}"
    }

    虚空setConfiguration配置Config收件人配置getProperty'foo bar你好')
    }

}

弹簧值注释

您可以使用Spring注释以注入配置值

 org springframework bean工厂注释

 我的控制器 {
    ('foo bar你好')
    接受者定义 你好渲染"你好${接受者}"
    }
}
在Groovy代码中,必须在字符串周围使用单引号引起来的值。注释,否则将被解释为GString而不是Spring表达式

如您所见,在访问配置设置时,您使用与定义它们时相同的点符号

YML格式配置的选项

365bet地区文件是在365bet地区中引入的,YAML现在是配置文件的首选格式

使用系统属性命令行参数

假设您正在使用JDBC连接字符串命令行参数,而您想访问yml文件中的参数,则可以通过以下方式完成

生产:
    数据源:
        网址: JDBC连接字符串

同样,可以访问系统参数

您将需要在建立gradle修改bootRun目标是否grails运行应用用于启动应用程序

bootRun系统属性系统属性

为了测试以下内容,需要更改测试任务如下

测试系统性能系统属性

外部配置

365bet地区应用属性yml来自配置365bet地区或默认情况下为当前目录,因为365bet地区是SpringBoot的配置选项,也可用于文档,请查阅https docs spring io spring boot docs当前参考html引导功能外部配置html引导功能外部配置应用程序属性文件

内置选项

365bet地区365bet地区具有一组值得了解的核心设置,它们的默认设置适用于大多数项目,但了解它们的工作很重要,因为以后您可能需要一个或多个它们

在运行时方面grails应用配置会议应用yml还有很多其他核心设置

  • grails启用本机ascii365bet地区如果您不需要365bet地区的本机ascii转换,请将其设置为false n属性文件,默认为true

  • 设置GSP的默认编码方式可以是无html之一,也可以是基本默认无。为降低XSS攻击的风险,请将其设置为html

  • grails视图gsp编码用于GSP源文件的文件编码默认为utf

  • grails mime文件扩展是否使用文件扩展名来指定MIME类型内容协商默认为true

  • 用于以下方面的受支持的mime类型的地图内容协商.

  • grails serverURL一个字符串,用于指定绝对链接的服务器URL部分,包括服务器名称,例如,grails serverURL http my yourportal com请参见createLink也被重定向使用

  • grails视图gsp sitemesh预处理确定是否进行SiteMesh预处理禁用此选项会减慢页面渲染速度,但是如果需要SiteMesh从GSP视图中解析生成的HTML,则将其禁用是正确的选项如果您不了解此高级属性,请不要担心,将其设置为true

  • grails重新加载排除配置这些指令可以确定特定于项目的源文件的重新加载行为每个指令都包含一个字符串列表,这些字符串是项目源文件的类名,应在重载行为中排除这些字符串,或者在运行带有开发环境的应用程序时相应地包含这些字符串。运行应用命令如果配置了伪指令,那么只有该列表中的类将被重新加载

记录中

365bet地区由于365bet地区日志记录由Logback日志记录框架365bet地区应用程序配置会议日志回切文件

如果您喜欢XML,可以替换logback groovy带有一个文件登录XML文件代替

有关配置日志记录的更多信息,请参阅就此主题而言

记录仪名称

365bet地区365bet地区工件控制器服务被注入日志自动属性

365bet地区在365bet地区之前,365bet地区 Artifact的记录器的名称遵循以下约定:365bet地区应用.其中type是工件的类型,例如要么服务班级名称

365bet地区365bet地区 x简化了记录器名称下例说明了更改

BookController常规位于365bet地区应用控制器公司不带注释自我

365bet地区记录器名称365bet地区 x或更高

365bet地区记录器名称365bet地区 x或更低

与公司BookController

grails应用程序控制器com公司BookController

BookController常规位于365bet地区应用控制器公司带有注释自我

记录器名称365bet地区 x或更高

记录器名称365bet地区 x或更低

与公司BookController

与公司BookController

BookService groovy位于365bet地区 App Services com公司不带注释自我

记录器名称365bet地区 x或更高

记录器名称365bet地区 x或更低

com公司BookService

365bet地区 App Services com公司BookService

BookService groovy位于365bet地区 App Services com公司带有注释自我

记录器名称365bet地区 x或更高

记录器名称365bet地区 x或更低

com公司BookService

com公司BookService

BookDetail groovy位于src groovy com公司带有注释自我

记录器名称365bet地区 x或更高

记录器名称365bet地区 x或更低

与公司BookDetail

与公司BookDetail

从Stacktrace日志屏蔽请求参数

365bet地区当365bet地区记录堆栈跟踪信息时,日志消息中可能包含当前请求的所有请求参数的名称和值。要屏蔽安全请求参数的值,请在grails exceptionresolver参数排除配置属性

grails应用配置会议应用yml
ils:
    异常解析器:
        参数:
            排除:
                - 密码
                - 信用卡

通过设置参数,可以完全关闭请求参数记录grails exceptionresolver logRequestParametersconfig属性为false当应用程序在开发模式下运行时,默认值为true;对于所有其他环境,默认值为false

grails应用配置会议应用yml
ils:
    异常解析器:
        日志请求参数: 

外部配置文件

如果设置配置属性日志配置你可以指导退回使用外部配置文件

grails应用配置会议应用yml
测井:
    配置: 用户我配置logback groovy

或者,您可以为配置文件位置提供系统属性

gradlew日志记录配置用户,我的配置logback groovy bootRun

或者您可以使用环境变量

导出LOGGING CONFIG用户config logback groovy gradlew bootRun

365bet地区365bet地区提供以下GORM配置选项

  • 格栅美食档案如果设置为导致保存域类上的方法抛出一个验证ValidationException如果验证保存过程中失败此选项也可能分配了代表程序包名称的字符串列表。如果该值是字符串列表,则failOnError行为将仅应用于包括子程序包在内的那些程序包中的域类。方法文档以获取更多信息

例如,为所有域类启用failOnError

ils:
    蓝色的:
        failOnError: 

并通过包为域类启用failOnError

ils:
    蓝色的:
        failOnError:
            - 公司名称为somepackage
            - 公司名称为someotherpackage

配置HTTP代理

365bet地区要将365bet地区设置为使用HTTP代理,有两个步骤:首先,您需要配置ils如果您希望使用代理来创建应用程序,则CLI要注意代理。可以使用网格选项环境变量,例如在Unix系统上

导出GRAILS OPTS Dhttps代理主机Dhttps代理端口Dhttp代理用户测试Dhttp代理密码测试
默认的配置文件存储库通过HTTPS解析,因此https proxyPorthttps proxyUser使用,但用户名和密码指定为http proxyUserhttp proxyPassword

对于Windows系统,可以在以下位置配置环境变量我的计算机高级环境变量.

有了此配置后,ils命令可以通过代理连接并进行身份验证

365bet地区其次,由于365bet地区使用Gradle作为构建系统,因此您需要将Gradle配置为通过代理进行身份验证。有关如何执行此操作的说明,请参见关于该主题的Gradle用户指南部分.

应用类别

365bet地区每个新的365bet地区应用程序都具有一个应用内的类365bet地区应用初始化目录

应用类将365bet地区AutoConfiguration类和功能静态空主方法,意味着它可以作为常规应用程序运行

执行应用程序类

有几种方法可以执行应用365bet地区类,如果您使用的是IDE,则只需右键单击该类并直接从IDE中运行它即可启动365bet地区应用程序

这对于调试也很有用,因为您可以直接从IDE进行调试,而无需在使用调试器时连接远程调试器。运行应用程序调试jvm从命令行命令

例如,您也可以将应用程序打包到可运行的WAR文件中

grails包java jar构建libs myapp war

如果您打算使用无容器方法来部署应用程序,这将非常有用

自定义应用程序类

您可以通过多种方式自定义应用

自定义扫描

365bet地区默认情况下,365bet地区将扫描所有已知的源目录以查找控制器域类,但是,如果您希望扫描的其他JAR文件中有软件包,则可以通过覆盖包名的方法应用

 应用 延伸365bet地区365bet地区AutoConfiguration覆写
    采集<包名包名'我的额外包裹']
    }

    ...
}

注册其他Bean

应用该类也可以用作Spring bean定义的源,只需定义一个用注释的方法即可。豆角,扁豆返回的对象将成为Spring bean。方法的名称用作bean名称

 应用 延伸365bet地区AutoConfiguration豆角,扁豆MyType myBean返回 我的风格

应用程序生命周期

应用该类还实现了365bet地区365bet地区Application生命周期所有插件实现的接口

这意味着应用该类可用于执行与插件相同的功能。您可以覆盖常规插件挂钩doWithSpring, doWithApplicationContext等等,以覆盖适当的方法

 应用 延伸365bet地区AutoConfiguration覆写关闭doWithSpring mySpringBean MyType

环境环境

每个环境配置

365bet地区365bet地区支持每个环境配置的概念应用程序中的文件grails应用程序配置目录可以使用YAML或通过提供的语法针对每个环境配置使用ConfigSlurper例如,考虑以下默认值365bet地区365bet地区提供的定义

环境:
    发展:
        数据源:
            dbCreate: 创建放置
            网址: jdbc h mem devDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    测试:
        数据源:
            dbCreate: 更新
            网址: jdbc h mem testDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    生产:
        数据源:
            dbCreate: 更新
            网址: jdbc h prodDb MVCC TRUE LOCK TIMEOUT DB CLOSE EXIT FALSE关闭
            属性:
               jmxEnabled: 
               initialSize: 5
        ...

上面可以用Groovy语法表示应用程序如下

合并的数据源driverClassName"org h驱动程序"用户名"她的"密码""环境开发数据源dbCreate"创建放置"网址"jdbc h mem devDb"测试数据源dbCreate"更新"网址"jdbc h mem testDb"生产数据源dbCreate"更新"网址"jdbc h prodDb"属性jmxEnabledinitialSize5
            }
        }
    }
}

请注意,如何在顶层提供通用配置,然后环境块为每个环境设置指定dbCreate网址的属性数据源.

在不同环境下打包和运行

365bet地区命令行具有内置功能,可以在特定环境的上下文中执行任何命令。格式为

ils> <>

365bet地区此外,365bet地区还知道一些预设环境开发者, 产品测试对于发展, 生产测试例如,为测试您会运行的环境

格拉斯试战

要定位其他环境,您可以通过365bet地区环境任何命令的变量

365bet地区 Dgrails env UAT运行应用程序

程序环境检测

在代码中(例如在Gant脚本或引导类中),您可以使用环境

 免费环境开关环境电流案件环境开发configureForDevelopment打破
    案件环境PRODUCTION configureForProduction打破
}

每个环境引导

通常需要在每个环境中启动应用程序时运行代码。为此,您可以使用365bet地区应用程序初始化BootStrap常规对每个环境执行的文件支持

定义初始化ServletContext ctx环境生产ctx setAttribute"大约", "产品"开发ctx setAttribute"大约", "开发者"ctx setAttribute"", "酒吧")
}

通用的每个环境执行

以前的示例使用免费环境在内部执行该类您也可以自己使用该类来执行您自己的环境特定逻辑

环境执行当前环境生产在生产中做某事发展只在开发中做某事
    }
}

数据源

365bet地区由于365bet地区是基于Java技术建立的,因此设置数据源需要JDBC的一些知识,该技术代表Java数据库连接

如果使用H以外的数据库,则需要JDBC驱动程序。例如,对于MySQL,则需要连接器J.

驱动程序通常以JAR存档的形式出现。如果Maven存储库中提供了jar,则最好使用依赖项解析来解析jar,例如,您可以像这样为MySQL驱动程序添加依赖项

依赖运行时'MySQL连接器'
}

365bet地区解决JAR问题后,您需要熟悉365bet地区如何管理其数据库配置。grails应用配置会议应用程序要么grails应用配置会议应用yml这些文件包含dataSource定义,其中包括以下设置

  • driverClassNameJDBC驱动程序的类名

  • 用户名用于建立JDBC连接的用户名

  • 密码用于建立JDBC连接的密码

  • 网址数据库的JDBC URL

  • dbCreate是从域模型自动生成数据库还是创建,删除,创建更新或验证

  • 派对是否使用连接池默认为true

  • logSql启用S​​QL记录到标准输出

  • 格式化Sql格式化记录的SQL

  • 方言表示用于与数据库通信的Hibernate方言的String或Class。冬眠组织方言可用方言包

  • 只读如果使DataSource只读,从而导致连接池调用setReadOnly true在各个连接

  • 交易性的如果将DataSource的transactionManager Bean留在链式BE PC事务管理器实现的外部这仅适用于其他数据源

  • 持久性拦截器默认数据源将自动连接到持久性拦截器,其他数据源将不会自动连接,除非将其设置为

  • 属性要在DataSource bean上设置的其他属性,请参见Tomcat池文档还有一种Javadoc格式属性文档.

  • jmxExport如果将禁用所有数据源的JMX MBean注册。默认情况下,为具有以下内容的数据源添加JMX MBean:jmxEnabled是在属性中

  • 类型365bet地区连接池类,如果您想在有多个可用池时强制365bet地区使用它

MySQL中的典型配置应用程序可能像

合并的数据源dbCreate"更新"网址"jdbc mysql localhost我的数据库"driverClassName"com mysql jdbc驱动程序"方言组织休眠方言MySQL InnoDBDialect用户名"用户名"密码"密码"类型"这是光。"属性jmxEnabledinitialSize5maxActive50minIdle5最大闲置25最大等待10000最大年龄10 * 60000timeBetweenEvictionRunsMillis5000minEvictableIdleTimeMillis60000validationQuery"选择"validationQueryTimeout3validationInterval15000testOnBorrowtestWhileIdletestOnReturnjdbcInterceptors"ConnectionState StatementCache最大"defaultTransactionIsolation java sql连接事务已提交读
在配置数据源时,在任何配置设置之前请勿包含type或def关键字,因为Groovy会将其视为本地变量定义,并且将不对其进行处理。例如,以下无效
数据源布尔值派对 类型声明导致忽略的局部变量
    ...
}

使用额外属性的高级配置示例

合并的数据源dbCreate"更新"网址"jdbc mysql localhost我的数据库"driverClassName"com mysql jdbc驱动程序"方言组织休眠方言MySQL InnoDBDialect用户名"用户名"密码"密码"类型"这是光。"属性Tomcat JDBC Pool的文档
       http tomcat apache org tomcat doc jdbc池html通用属性
       https tomcat apache org tomcat doc api org apache tomcat jdbc池PoolConfiguration htmljmxEnabledinitialSize5maxActive50minIdle5最大闲置25最大等待10000最大年龄10 * 60000timeBetweenEvictionRunsMillis5000minEvictableIdleTimeMillis60000validationQuery"选择"validationQueryTimeout3validationInterval15000testOnBorrowtestWhileIdletestOnReturnignoreExceptionOnPreLoad
       http tomcat apache org tomcat doc jdbc pool html JDBC拦截器jdbcInterceptors"ConnectionState StatementCache最大"defaultTransactionIsolation java sql连接事务已提交读安全默认
       连接泄漏的控件完全放弃百分比100 设置仅在池满时才激活removeAbandonedTimeout120removeAbandoned
       使用JMX控制台在运行时更改此设置徽标放弃 导致堆栈跟踪记录开销仅用于调试
       JDBC驱动程序属性
       以mysql为例dbPropertiesMySQL特定的驱动程序属性
           http dev mysql com doc连接器j en连接器j参考配置属性html
           让Tomcat JDBC Pool处理重新连接自动重新连接
           截断行为jdbcCompliantTruncation
           mysql日期转换zeroDateTimeBehavior'convertToNull'
           改为使用Tomcat JDBC Pool的StatementCache,因此禁用mysql驱动程序的缓存cachePrepStmtscacheCallableStmts
           Tomcat JDBC Pool的StatementFinalizer保持跟踪dontTrackOpenResources
           性能优化可减少mysql驱动程序代码中引发的SQLExceptions数量holdResultsOpenOverStatementClose
           使用服务器准备stmts启用MySQL查询缓存将禁用查询缓存useServerPrepStmts
           元数据缓存cacheServerConfigurationcacheResultSetMetadatametadataCacheSize100
           TCP IP超时connectTimeout15000socketTimeout120000
           计时器调整禁用maintainTimeStatsenableQueryTimeouts
           杂项调整Nodate Chime St Ring Syn c
       }
    }
}

有关dbCreate的更多信息

Hibernate可以自动创建域模型所需的数据库表。您可以控制何时以及如何执行此操作。dbCreate可以采用这些值的属性

  • 创建删除现有模式并在启动时创建模式,首先删除现有表的索引等

  • 创建放置如同创建而且在应用程序完全关闭时也会删除表

  • 更新创建丢失的表和索引,并在不删除任何表或数据的情况下更新当前模式,请注意,这无法正确处理许多模式更改,例如您使用包含现有数据的旧列保留了列重命名

  • 验证不更改数据库,将配置与现有数据库架构进行比较并报告警告

  • 任何其他值都无济于事

设置dbCreate建议在您的架构相对稳定之后(绝对是在将应用程序和数据库部署到生产环境中时)设置为none,然后通过使用SQL脚本或类似迁移工具的适当迁移来管理数据库更改飞路要么液基数据库迁移插件使用Liquibase

数据源和环境

前面的示例配置假定您要在所有环境,生产测试开发等中使用相同的配置

365bet地区365bet地区数据源定义是环境感知的,但是您可以这样做

合并的数据源driverClassName"com mysql jdbc驱动程序"方言组织休眠方言MySQL InnoDBDialect其他常用设置环境生产dataSource网址"jdbc mysql liveip com liveDb"
            其他特定于环境的设置
        }
    }
}

自动数据库迁移

dbCreate的属性数据源365bet地区定义很重要,因为它决定了365bet地区在运行时应如何从中自动生成数据库表。类这些选项在数据源部分

  • 创建

  • 创建放置

  • 更新

  • 验证

  • 没有价值

发展模式dbCreate默认情况下,它设置为创建删除,但是在开发的某个时刻,当然,一旦投入生产,您将需要在每次启动服务器时停止删除并重新创建数据库。

诱人的切换到更新因此,您保留了现有数据,并且仅在代码更改时才更新架构,但是Hibernate的更新支持非常保守。它不会进行任何可能导致数据丢失的更改,并且不会检测到重命名的列或表,因此您将只剩下旧的一,也将有新的

365bet地区365bet地区通过插件支持Liquibase或Flyway的迁移

具有交易意识的数据源代理

实际上数据源bean被包装在一个可识别事务的代理中,因此将为您提供当前事务或Hibernate正在使用的连接届会如果一个活跃

如果不是这种情况,请从数据源将是一个新的连接,并且假设您具有明智的事务隔离设置,例如,您将无法看到尚未提交的更改读已提交或更好

数据库控制台

H数据库控制台是H的一项便利功能,它为您拥有JDBC驱动程序的任何数据库提供基于Web的界面,并且查看针对其开发的数据库非常有用。当针对内存数据库运行时,该功能尤其有用

您可以通过导航到控制台来访问控制台http localhost h控制台在浏览器中查看Spring Boot H控制台文档有关可用选项的更多信息

多个数据源

默认情况下,所有域类共享一个数据源和一个数据库,但您可以选择将域类划分为两个或多个数据源

配置其他数据源

默认值数据源在配置grails应用配置会议应用yml看起来像这样

数据源:
    派对: 
    jmxExport: 
    driverClassName: org h驱动程序
    用户名: 她的
    密码:

环境:
    发展:
        数据源:
            dbCreate: 创建放置
            网址: jdbc h mem devDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    测试:
        数据源:
            dbCreate: 更新
            网址: jdbc h mem testDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    生产:
        数据源:
            dbCreate: 更新
            网址: jdbc h prodDb MVCC TRUE LOCK TIMEOUT DB CLOSE EXIT FALSE关闭
            属性:
               jmxEnabled: 
               initialSize: 5

这将配置一个数据源带有命名为Spring bean的数据源要配置额外的数据源,请添加数据源屏蔽环境中的顶层或两者都像标准数据源具有自定义名称的定义例如,此配置添加了第二个数据源在开发环境中使用MySQL,在生产环境中使用Oracle

数据源:
    派对: 
    jmxExport: 
    driverClassName: org h驱动程序
    用户名: 她的
    密码:

数据源:
    抬头:
        方言: org休眠方言MySQLInnoDBDialect
        driverClassName: com mysql jdbc驱动程序
        用户名: 抬头
        密码: 秘密
        网址: jdbc mysql localhost查找
        dbCreate: 更新

环境:
    发展:
        数据源:
            dbCreate: 创建放置
            网址: jdbc h mem devDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    测试:
        数据源:
            dbCreate: 更新
            网址: jdbc h mem testDb MVCC TRUE LOCK TIMEOUT DB关闭时退出假
    生产:
        数据源:
            dbCreate: 更新
            网址: jdbc h prodDb MVCC TRUE LOCK TIMEOUT DB CLOSE EXIT FALSE关闭
            属性:
                jmxEnabled: 
                initialSize: 5
                ...
        数据源:
            抬头:
                方言: 组织休眠方言Oracle gDialect
                driverClassName: oracle jdbc驱动程序OracleDriver
                用户名: 抬头
                密码: 秘密
                网址: jdbc oracle瘦本地主机查找
                dbCreate: 更新

您可以使用相同或不同的数据库,只要Hibernate支持它们即可

如果您需要注入抬头365bet地区365bet地区工件中的数据源,您可以像这样

数据源dataSource查找
在定义多个数据源时,其中之一必须365bet地区被命名为dataSource这是必需的,因为365bet地区通过确定哪个数据源被命名为dataSource来确定哪个数据源是默认的

配置域类

如果域类没有数据源默认配置为标准数据源设置数据源物业映射阻止配置非默认值数据源例如,如果您想使用邮政编码要使用的域抬头 数据源像这样配置

 邮政编码 {

   静态的映射数据源'抬头'
   }
}

域类也可以使用两个或多个数据源。数据源具有名称列表的属性,例如,可以配置多个名称

 邮政编码 {

   静态的映射数据源'抬头', '审核'])
   }
}

如果域类使用默认值数据源还有一个或多个其他使用特殊名称默认表示默认数据源:

 邮政编码 {

   静态的映射数据源'抬头', '默认'])
   }
}

如果域类使用所有已配置的数据源,请使用特殊值所有:

 邮政编码 {

   静态的映射数据源'所有'
   }
}

命名空间和GORM方法

如果一个域类使用多个数据源那么您可以使用每个隐含的名称空间数据源拨打特定电话的名称数据源例如,考虑使用两个数据源的此类

 邮政编码 {

   静态的映射数据源'抬头', '审核'])
   }
}

首先数据源当不使用显式命名空间时,指定为默认值,因此在这种情况下,我们默认为抬头但是您可以在审核中调用GORM方法数据源数据源例如名称

定义zipCode ZipCode审核获取42邮政编码审核保存

如您所见,您添加了数据源在静态情况和实例情况下都调用方法

休眠映射域类

您还可以将带注释的Java类划分为单独的数据源,使用默认数据源的类已注册在grails应用程序会议休眠cfg xml要指定带注释的类使用非默认数据源,请创建一个休眠cfg xml该数据源的文件,文件名以数据源名称为前缀

例如,如果类在默认数据源中,您可以在其中注册grails应用程序会议休眠cfg xml:




   
      <> ='org范例书'/>
   

如果图书馆该类在ds数据源中,您将在其中注册grails应用程序conf ds休眠cfg xml:




   
      <> ='组织示例库'/>
   

对于使用hbm xml文件映射的类,该过程相同,只是将它们列出在适当的hibernate cfg xml文件中

服务

默认情况下,像域类一样,服务使用默认值数据源PlatformTransactionManager配置服务以使用其他服务数据源使用静态数据源例如属性

 数据服务 {

   静态的数据源'抬头'

   虚空someMethod

交易服务只能使用一个数据源因此,请确保仅对其域类进行更改数据源与服务相同

请注意,服务中指定的数据源与域类所使用的数据源无关,该域类由其在域类本身中声明的数据源确定。它用于声明要使用哪个事务管理器

如果你有一个oo域类数据源还有一个酒吧域类数据源如果WahooService用途数据源一种保存新的服务方法oo和一个新的酒吧仅适用于oo由于它们共享相同的数据源,因此交易不会影响酒吧实例如果您希望两者都是事务性的,则需要使用两个服务和XA数据源通过Atomikos插件进行两阶段提交

跨多个数据源的事务

365bet地区默认情况下,365bet地区不会尝试处理跨越多个数据源的事务

365bet地区您可以使365bet地区使用尽力而为PC模式来处理跨多个数据源的事务。为此,您必须设置365bet地区启用了chainedTransactionManagerPostProcessor事务设置为:

ils:
  交易:
    chainedTransactionManagerPostProcessor:
      已启用: 

尽力而为的PC模式是相当笼统的,但在某些情况下可能会失败,开发人员必须意识到

这是一种非XA模式,涉及多个资源的同步单阶段提交,因为个人电脑不被使用,它永远不会像XA交易,但如果参与者意识到折衷方案,通常就足够了

基本思想是尽可能延迟事务中所有资源的提交,以便唯一可能出错的是基础结构故障,而不是业务处理错误。依靠尽力而为PC的系统认为基础结构故障非常罕见他们可以承担风险以换取更高的吞吐量如果业务处理服务也被设计为幂等的,那么实践中几乎不会出错

365bet地区在365bet地区中添加了BE PC实现。在此更改之前,其他数据源未参与365bet地区中启动的事务。其他数据源中的事务基本上处于自动提交模式。在某些情况下,这可能是所需的行为。一个原因可能是启动时的性能。在每笔新交易中,BE PC交易管理器都会为每个数据源创建一个新交易。通过设置交易错误在其他dataSource数据源的相应配置块中readOnly是也将被排除在链式交易管理器之外,因为

默认情况下,BE PC实现将添加所有实现Spring的beanPlatformTransactionManager与链式BE PC事务管理器的接口例如可能JMSTransactionManager365bet地区365bet地区应用程序上下文中的bean将被添加到365bet地区 BE PC事务管理器的事务管理器链中

您可以使用此配置选项从BE PC实施中排除事务管理器bean

ils:
  交易:
    chainedTransactionManagerPostProcessor:
      已启用: 
      黑名单模式: '.*'

排除匹配是在事务管理器bean的名称上完成的。交易错误要么readOnly是将被跳过,在这种情况下不需要使用此配置选项

XA和两阶段提交

365bet地区当“尽力而为” PC模式不适合跨多个事务资源处理事务时,不仅有数据源,还有几个选项可用于向365bet地区应用程序添加XA PC支持

春季交易文档包含有关集成不同应用程序服务器的JTA XA事务管理器的信息。在这种情况下,您可以使用以下名称配置bean:transactionManager手动输入资源槽要么资源xml文件

版本控制

在运行时检测版本

365bet地区您可以使用365bet地区对应用程序元数据的支持来检测应用程序版本,方法是使用365bet地区应用类例如在有一个隐含的grails应用可以使用的变量

定义版本grailsApplication元数据getApplicationVersion

365bet地区您可以检索运行的365bet地区版本

定义365bet地区grailsVersion grails应用程序元数据get365bet地区Version

或者365bet地区365bet地区Util

 365bet地区365bet地区实用工具365bet地区Util365bet地区def grailsVersion 365bet地区Util grailsVersion

依赖解决

依赖关系解析由Gradle构建工具所有依赖项都在建立gradle文件请参阅Gradle用户指南了解更多信息