Grails配置-启动类配置,数据源配置,连接Mysql数据库

article/2025/9/13 18:41:34

文章目录

  • Grails配置
    • 1. 启动类配置
      • Application.groovy启动类中可以做哪些事情
        • 1. 启动Grails应用程序
        • 2. 自定义包扫描路径
        • 3. 注册bean
        • 4. 应用程序生命周期管理
    • 2. 环境配置
      • 2.1 默认的多环境配置
      • 2.2 预设的环境
      • 2.3 打包和运行使用不同的环境
      • 2.4 在代码启动过程中判断当前环境
      • 2.5 在代码中运行过程中判断当前环境
    • 3. 数据源配置
      • 配置Mysql数据源
        • 1. 添加mysql驱动程序依赖项
        • 2. 修改application.yml中的数据库连接信息
        • 3. 创建数据库grails4_hello
        • 4. 启动项目测试数据库连接
        • 5. 配置参数说明
        • 6. 默认了开启数据库控制台
        • 7. 是否需要手动关闭H2数据库控制台?
      • 多数据源配置
    • 4. 小结

Grails配置

1. 启动类配置

Grails应用程序启动类Application.groovy位于grails-app/init目录。
Application.groovy类继承了启动 Grails 应用程序配置的基类grails.boot.config.GrailsAutoConfiguration,并有静态void Main方法,这意味着它可以作为常规应用程序启动。
默认的Application.groovy启动类代码

package helloworldgrails4import grails.boot.GrailsApp
import grails.boot.config.GrailsAutoConfigurationimport groovy.transform.CompileStatic@CompileStatic
class Application extends GrailsAutoConfiguration {static void main(String[] args) {GrailsApp.run(Application, args)}
}

看看他继承的grails.boot.config.GrailsAutoConfiguration类有哪些配置

package grails.boot.configimport grails.config.Config
import grails.core.GrailsApplication
import grails.boot.config.tools.ClassPathScanner
import grails.core.GrailsApplicationClass
import groovy.transform.CompileStatic
import org.grails.compiler.injection.AbstractGrailsArtefactTransformer
import org.grails.spring.aop.autoproxy.GroovyAwareAspectJAwareAdvisorAutoProxyCreator
import org.springframework.aop.config.AopConfigUtils
import org.springframework.context.ApplicationContext
import org.springframework.context.ApplicationContextAware
import org.springframework.context.annotation.Bean
import org.springframework.core.io.support.PathMatchingResourcePatternResolverimport java.lang.reflect.Field/*** A base class for configurations that bootstrap a Grails application* 引导 Grails 应用程序的配置的基类** @since 3.0* @author Graeme Rocher**/
@CompileStatic
// WARNING: Never add logging to the source of this class, early initialization causes problems
// 警告:永远不要在这个类的源代码中添加日志,过早的初始化会导致问题
class GrailsAutoConfiguration implements GrailsApplicationClass, ApplicationContextAware {private static final String APC_PRIORITY_LIST_FIELD = "APC_PRIORITY_LIST"static {try {// patch AopConfigUtils if possible// 如果可能,修补 AopConfigUtilsField field = AopConfigUtils.class.getDeclaredField(APC_PRIORITY_LIST_FIELD)if(field != null) {field.setAccessible(true)Object obj = field.get(null)List<Class<?>> list = (List<Class<?>>) objlist.add(GroovyAwareAspectJAwareAdvisorAutoProxyCreator.class)}} catch (Throwable e) {// ignore}}ApplicationContext applicationContext/*** @return A post processor that uses the {@link grails.plugins.GrailsPluginManager} to configure the {@link org.springframework.context.ApplicationContext}* 使用grails.plugins.GrailsPluginManager配置ApplicationContext后处理器*/@BeanGrailsApplicationPostProcessor grailsApplicationPostProcessor() {return new GrailsApplicationPostProcessor( this, applicationContext, classes() as Class[])}/*** @return The classes that constitute the Grails application* 构成 Grails 应用程序的类*/Collection<Class> classes() {Collection<Class> classes = new HashSet()ClassPathScanner scanner = new ClassPathScanner()if(limitScanningToApplication()) {classes.addAll scanner.scan(getClass(), packageNames())}else {classes.addAll scanner.scan(new PathMatchingResourcePatternResolver(applicationContext), packageNames())}ClassLoader classLoader = getClass().getClassLoader()for(cls in AbstractGrailsArtefactTransformer.transformedClassNames) {try {classes << classLoader.loadClass(cls)} catch (ClassNotFoundException cnfe) {// ignore}}return classes}/*** Whether classpath scanning should be limited to the application and not dependent JAR files. Users can override this method to enable more broad scanning* at the cost of startup time.* 类路径扫描是否应仅限于应用程序而不是依赖的 JAR 文件。 用户可以覆盖此方法,以启动时间为代价启用更广泛的扫描。** @return True if scanning should be limited to the application and should not include dependant JAR files* 返回:如果扫描应仅限于应用程序且不应包括相关的 JAR 文件,则为 True*/protected boolean limitScanningToApplication() {return true}/*** @return The packages to scan* 返回:要扫描的包*/Collection<Package> packages() {def thisPackage = getClass().packagethisPackage ? [ thisPackage ] : new ArrayList<Package>()}/*** @return The package names to scan. Delegates to {@link #packages()} by default* 返回:要扫描的包名称。 默认情况下委托给packages()*/Collection<String> packageNames() {packages().collect { Package p -> p.name }}/*** 返回:一个定义要被 Spring 注册的 bean 的闭包*/@OverrideClosure doWithSpring() { null }/*** 在org.springframework.context.ApplicationContext在插件可以添加动态方法的阶段刷新后调用。 子类应该覆*/@Overridevoid doWithDynamicMethods() {// no-op}/*** 一旦org.springframework.context.ApplicationContext被刷新并且在 {#doWithDynamicMethods()} 被调用后调用*/@Overridevoid doWithApplicationContext() {// no-op}/*** 当应用程序配置更改时调用* 参数:事件*/@Overridevoid onConfigChange(Map<String, Object> event) {// no-op}/*** 调用一次所有先前的初始化钩子: doWithSpring() 、 doWithDynamicMethods()和doWithApplicationContext()*/@Overridevoid onStartup(Map<String, Object> event) {// no-op}/*** 当org.springframework.context.ApplicationContext关闭时调用*/@Overridevoid onShutdown(Map<String, Object> event) {// no-op}GrailsApplication getGrailsApplication() {applicationContext.getBean(GrailsApplication)}Config getConfig() {grailsApplication.config}}

Application.groovy启动类中可以做哪些事情

1. 启动Grails应用程序

启动Grails应用程序

2. 自定义包扫描路径

默认情况下,Grails将扫描控制器,领域类等的所有已知源目录,但是如果希望扫描其他JAR文件中的包,则可以通过覆盖应用程序类的packageNames()方法来实现:

class Application extends GrailsAutoConfiguration {@OverrideCollection<String> packageNames() {super.packageNames() + ['my.additional.package']}...
}

3. 注册bean

应用程序类也可以用作注册Spring Bean对象,只需定义有bean注解的方法,返回的对象作为bean对象,方法的名称用作bean名称。

class Application extends GrailsAutoConfiguration {@BeanMyType myBean() {return new MyType()}...
}

4. 应用程序生命周期管理

Application.groovy类继承了启动 Grails 应用程序配置的基类grails.boot.config.GrailsAutoConfiguration,而grails.boot.config.GrailsAutoConfiguration又实现了grails.core.GrailsApplicationLifeCycle接口。这个接口提供了Grails应用程序的生命周期钩子方法,所有插件都实现了这个接口,我们可以通过重写这些钩子方法来扩展一些功能。

class Application extends GrailsAutoConfiguration {/*** 返回:一个定义要被 Spring 注册的 bean 的闭包*/@OverrideClosure doWithSpring() {{->// 要注册的 beanmySpringBean(MyType)}}...
}

2. 环境配置

Grails支持多环境配置。 grails-app / conf目录中的application.yml可以使用yaml语法进行多环境配置。

2.1 默认的多环境配置

例如application.yml默认的多环境配置:

# 配置数据库链接通用属性
dataSource:pooled: truejmxExport: truedriverClassName: org.h2.Driverusername: sapassword: ''environments:# 开发环境数据源配置,在上面通用数据源配置上进行扩展development:dataSource:# 开发环境使用create-drop,服务每次启动时创建数据库和表,服务器停止时删除数据库和表dbCreate: create-drop# 模式使用H2内存数据库,也可以配置成文件数据库,H2数据库默认用户名sa,密码空。还可以在conf/application.yml中开启控制台界面url: jdbc:h2:mem:devDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE# 测试环境数据源配置,在上面通用数据源配置上进行扩展test:dataSource:# 测试环境使用update,每次启动会更新表结构,服务停止不会删除数据库和表dbCreate: update# 模式使用H2内存数据库url: jdbc:h2:mem:testDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE# 生产环境数据源配置,在上面通用数据源配置上进行扩展production:dataSource:# 生产环境配置为nonedbCreate: none# 模式使用H2文件数据库url: jdbc:h2:./prodDb;MVCC=TRUE;LOCK_TIMEOUT=10000;DB_CLOSE_ON_EXIT=FALSE# 配置数据源的其他信息properties:jmxEnabled: trueinitialSize: 5...

注意上面使用了dataSource提供了公共配置信息,然后在每个环境配置中又配置了dataSource,这样可以使用公共的配置,然后再添加各自的特殊环境配置。

2.2 预设的环境

Grails预设了3个环境:
dev:开发环境
prod:生产环境
test:测试环境

2.3 打包和运行使用不同的环境

使用测试环境打包
grails test war
使用grails.env环境变量配置环境
grails -Dgrails.env=test run-app

2.4 在代码启动过程中判断当前环境

grails-app/init/BootStrap.groovy文件可以在项目启动时做一些初始化配置,针对不同的环境设置不同的配置。
例如:

def init = { ServletContext ctx ->environments {production {// 开发环境设置一个env的属性信息ctx.setAttribute("env", "prod")}development {// 开发环境启动项目时初始化一条book记录new Book(title: "《Grails教程》").save()}}// 任何环境下启动项目,都设置一个作者年龄的属性配置信息ctx.setAttribute("book.author.age", 18)
}

2.5 在代码中运行过程中判断当前环境

在代码中使用 Environment 类检测环境。

import grails.util.Environment...
switch (Environment.current) {// 当前是开发环境case Environment.DEVELOPMENT:// 做一些开发环境的特殊处理configureForDevelopment()break// 当前是生产环境   case Environment.PRODUCTION:// 做一些生成环境的特殊处理configureForProduction()break
}

3. 数据源配置

在上面的conf/application.yml多环境配置中,我们已经看到了数据源相关的配置,一般情况下都是这两者相互结合使用的。

Grails使用H2作为默认数据库,如果要使用其他数据库,需要添加对应的JDBC驱动程序,因为Grails是基于java构建的。

配置Mysql数据源

1. 添加mysql驱动程序依赖项

Grails使用Gradle构建项目,需要在build.gradle的dependencies中添加
runtime 'mysql:mysql-connector-java:5.1.39'
根据自己使用的mysql版本,选择对应的驱动包版本。

2. 修改application.yml中的数据库连接信息

这里只修改开发环境中的数据库连接信息,其他环境不做修改。

# 配置数据库链接通用属性
dataSource:pooled: truejmxExport: truedriverClassName: org.h2.Driverusername: sapassword: ''environments:# 开发环境数据源配置,在上面通用数据源配置上进行扩展development:dataSource:# 开发环境使用create-drop,服务每次启动时创建数据库和表,服务器停止时删除数据库和表dbCreate: create-drop# 使用 mysql 驱动driverClassName: com.mysql.jdbc.Driver# 使用 mysql 数据库连接,加上 useUnicode 和 characterEncoding 参数防止中文乱码url: jdbc:mysql://localhost:3306/grails4_hello?useUnicode=true&characterEncoding=utf8username: rootpassword: 123456test:dataSource:...

3. 创建数据库grails4_hello

CREATE DATABASE grails4_hello;

4. 启动项目测试数据库连接

因为数据库配置使用dbCreate: create-drop启动项目后,查看数据库中已经自动创建了book表。
mysql自动创建book表
打开浏览器访问http://localhost:8080/book/create添加一条书籍记录
添加一个书籍记录
添加后查看数据库中,已经成功插入一条记录
成功添加一条记录
到这里Grails已经成功连接到mysql数据库了,这里只添加了一些简单的配置像,还有其他更多的配置项也比较重要。

5. 配置参数说明

grails-app/conf/application.yml中可以做下面这些配置:

配置项说明
driverClassNameJDBC 驱动程序的类名。例如Mysql:driverClassName: com.mysql.jdbc.Driver
usernameJDBC 连接的用户名
passwordJDBC 连接的密码
url数据库的 JDBC 连接
dbCreate是否从域模型自动生成数据库 - ‘create-drop’、‘create’、‘update’、‘validate’ 或 ‘none’ 之一
pooled是否使用连接池(默认为 true)
logSql启用 SQL 日志记录到标准输出
formatSql格式化记录的 SQL
dialect方言 - 表示用于与数据库通信的Hibernate方言的字符串或类。有关可用方言,请参阅org.hibernate.dialect包。
readOnly如果true使数据源只读,这会导致连接池在每个连接上调用setReadOnly(True)
transactional事务性 - 如果false将DataSource的TransactionManage Bean留出在链接的BE1PC事务管理器实现之外。这仅适用于其他数据源。
persistenceInterceptor默认数据源是自动连接到持久性拦截器,除非这设置为true,否则其他数据源不会自动连接,用于多数据源。
properties在DataSource Bean上设置的额外属性。请参阅Tomcat池文档。还有一个javadoc格式的属性文件。
jmxExport如果为false,则将禁用所有数据源的JMX MBean的注册。默认情况下,JMX MBeans为jmxEnabled = True的数据源添加了数据库。
type连接池类型,如果要强制Grails在有多个可用时使用它。

dbCreate参数说明

Hibernate可以自动创建领域类所需的数据库表。可以通过dbCreate属性来控制何时以及如何创建这些表。

参数配置说明:

  • create:删除现有架构并在启动时创建架构,删除现有表,索引等。
  • create-drop :与创建相同,但也会在应用程序退出时删除表。
  • update:创建缺少的表和索引,不删除任何表或数据。注意,这不能处理表或者属性的更改,例如领域类属性重命名,会添加新列,但不会删除旧列和数据。
  • validate:对数据库没有更改。将配置与现有数据库架构进行比较并报告警告。
  • none:什么都不做

当应用程序的架构相对稳定,建议将dbCreate设置设置为“none”。

下面是Mysql 金典配置示例,使用的是groovy脚本配置,重点关注参数的配置,只需要将{改成号就变成yml配置了:

dataSource {pooled = truedbCreate = "update"url = "jdbc:mysql://localhost:3306/my_database"driverClassName = "com.mysql.jdbc.Driver"dialect = org.hibernate.dialect.MySQL5InnoDBDialectusername = "username"password = "password"type = "com.zaxxer.hikari.HikariDataSource"properties {jmxEnabled = trueinitialSize = 5maxActive = 50minIdle = 5maxIdle = 25maxWait = 10000maxAge = 10 * 60000timeBetweenEvictionRunsMillis = 5000minEvictableIdleTimeMillis = 60000validationQuery = "SELECT 1"validationQueryTimeout = 3validationInterval = 15000testOnBorrow = truetestWhileIdle = truetestOnReturn = falsejdbcInterceptors = "ConnectionState;StatementCache(max=200)"defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED}
}

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

dataSource {pooled = truedbCreate = "update"url = "jdbc:mysql://localhost:3306/my_database"driverClassName = "com.mysql.jdbc.Driver"dialect = org.hibernate.dialect.MySQL5InnoDBDialectusername = "username"password = "password"type = "com.zaxxer.hikari.HikariDataSource"properties {// Tomcat JDBC Pool 文档// http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Common_Attributes// https://tomcat.apache.org/tomcat-7.0-doc/api/org/apache/tomcat/jdbc/pool/PoolConfiguration.htmljmxEnabled = trueinitialSize = 5maxActive = 50minIdle = 5maxIdle = 25maxWait = 10000maxAge = 10 * 60000timeBetweenEvictionRunsMillis = 5000minEvictableIdleTimeMillis = 60000validationQuery = "SELECT 1"validationQueryTimeout = 3validationInterval = 15000testOnBorrow = truetestWhileIdle = truetestOnReturn = falseignoreExceptionOnPreLoad = true// http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#JDBC_interceptorsjdbcInterceptors = "ConnectionState;StatementCache(max=200)"defaultTransactionIsolation = java.sql.Connection.TRANSACTION_READ_COMMITTED // safe default// controls for leaked connectionsabandonWhenPercentageFull = 100 // settings are active only when pool is fullremoveAbandonedTimeout = 120removeAbandoned = true// use JMX console to change this setting at runtimelogAbandoned = false // causes stacktrace recording overhead, use only for debugging// JDBC driver properties// Mysql as exampledbProperties {// Mysql specific driver properties// http://dev.mysql.com/doc/connector-j/en/connector-j-reference-configuration-properties.html// let Tomcat JDBC Pool handle reconnectingautoReconnect=false// truncation behaviourjdbcCompliantTruncation=false// mysql 0-date conversionzeroDateTimeBehavior='convertToNull'// Tomcat JDBC Pool's StatementCache is used instead, so disable mysql driver's cachecachePrepStmts=falsecacheCallableStmts=false// Tomcat JDBC Pool's StatementFinalizer keeps trackdontTrackOpenResources=true// performance optimization: reduce number of SQLExceptions thrown in mysql driver codeholdResultsOpenOverStatementClose=true// enable MySQL query cache - using server prep stmts will disable query cachinguseServerPrepStmts=false// metadata cachingcacheServerConfiguration=truecacheResultSetMetadata=truemetadataCacheSize=100// timeouts for TCP/IPconnectTimeout=15000socketTimeout=120000// timer tuning (disable)maintainTimeStats=falseenableQueryTimeouts=false// misc tuningnoDatetimeStringSync=true}}
}

6. 默认了开启数据库控制台

Grails默认使用H2数据库,也开启了H2数据库控制台,可以使用web界面连接数据库,管理数据库,特别是针对内存数据库非常方便。
浏览器输入http://localhost:8080/h2-console访问web界面数据库控制台。
H2控制台登陆页面
登录成功后,我们可以执行sql命令
H2控制台执行sql命令
可以在grails-app/conf/application.yml中配置spring.h2.console.enabled=false来关闭H2控制台。

7. 是否需要手动关闭H2数据库控制台?

H2数据库控制台开启需要3个前提条件:

  • 应用程序是基于Servlet的Web应用
  • classpath中包含com.h2database:h2
  • 使用了spring-boot-devtools插件

查看build.gradledependencies,发现使用了spring-boot-devtools依赖:
developmentOnly("org.springframework.boot:spring-boot-devtools")
这个依赖表示只在开发环境中添加依赖,当项目打包时不包含这个插件,就不能满足上面的3个条件了,所以打包后的生产环境无法访问http://localhost:8088/h2-console,不需要手动关闭H2数据库控制台。
更多H2配置参考Spring Boot H2控制台文档

多数据源配置

默认情况下,所有领域类使用一个数据源和单个数据库。
也可以将领域类数据库保存在两个或多个数据源中。
一般情况下使用不到,暂不做讲解。

4. 小结

本章主要介绍了以下知识点:

  • 在哪里注册bean。
  • 在代码中如何判断当前项目的运行环境(开发环境、生产环境、测试环境)。
  • 如何配置多环境数据源。
  • 如何连接Mysql数据库。
  • 如何使用H2数据库控制台管理数据库。

http://chatgpt.dhexx.cn/article/jkTQfInL.shtml

相关文章

java grails mave_Grails 与 Maven 集成

Grails 与 Maven 集成 杨 健 2013 年 9 月 09 日发布 概述 Grails 简介&#xff1a;Grails 是一个开源的 Web 开发框架&#xff0c;它采用动态语言 Groovy 进行开发&#xff0c;并且可以和用 Java 开发的项目进行集成。Grails 充分体现了约定优于配置的原则&#xff0c;将项目的…

Grails4.0.11入门

文章目录 Grails4.0.11介绍相关依赖入门⎮Java环境搭建⎮Grails环境搭建⎮如何创建grails应用⎮如何选择开发工具IDEA如何导入Grails项目 ⎮目录结构&#xff0c;约定优于配置⎮如何部署Grails项目1. 使用默认内嵌的Tomcat8部署2. 使用外部Tomtcat8部署3. 使用外部Tomcat7部署 …

grails java_Grails

十二、Grails 如今的Java Web开发对于需求来说已经变得过于复杂。当今众多Java领域的Web开发框架不仅使用复杂&#xff0c;而且并没有很好的遵循Don’t Repeat Yourself(DRY)原则。像Rails&#xff0c;Django和TurboGears这样的动态框架在Web开发领域开辟了一条新的道路&#x…

JAVA AIO编程

Asynchronous IO&#xff1a; 异步非阻塞的编程方式 与NIO不同&#xff0c;当进行读写操作时&#xff0c;只须直接调用API的read或write方法即可。这两种方法均为异步的&#xff0c;对于读操作而言&#xff0c;当有流可读取时&#xff0c;操作系统会将可读的流传入read方法的缓…

java aio_Java AIO详解

JDK1.7升级了NIO类库&#xff0c;升级后的NIO类库被称为NIO 2.0。 Java正式提供了异步文件I/O操作&#xff0c;同时提供了与UNIX网络编程事件驱动I/O对应的AIO。 AIO编程 NIO 2.0引入了新的异步通道的概念&#xff0c;并提供了异步文件通道和异步套接字通道的实现。 异步通道获…

Java I/O 模型之 AIO

❤️ 个人主页&#xff1a;水滴技术 &#x1f680; 支持水滴&#xff1a;点赞&#x1f44d; 收藏⭐ 留言&#x1f4ac; &#x1f338; 订阅专栏&#xff1a;Java 教程&#xff1a;从入门到精通 大家好&#xff0c;我是水滴~~ 文章目录 服务端API创建服务端套接字的异步通道接…

如何用AIO技术提高程序性能

写在前面 这是一篇关于 AIO 的文章。本篇文章详细对比了几个常见的I/O模型&#xff0c;并且介绍了AIO相关的一些API。 我把英文原文翻译过来整理成这篇文章。目的一个是自己学习&#xff0c;一个是方便不习惯看英文资料的同学进行学习。 英文原文地址&#xff1a; https://…

08【AIO编程】

八、AIO编程 8.1 AIO编程简介 8.1.1 AIO编程概述 AIO也叫异步非阻塞&#xff0c;JDK1.7之后的新特性&#xff0c;AIO引入异步通道的概念&#xff0c;采用了 Proactor 模式&#xff0c;简化了程序编写&#xff0c;有效的请求才启动线程&#xff0c;它的特点是先由操作系统完成…

linux aio进程简介,Linux AIO机制

Linux的I/O机制经历了一下几个阶段的演进&#xff1a; 1. 同步阻塞I/O: 用户进程进行I/O操作&#xff0c;一直阻塞到I/O操作完成为止。 2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK&#xff0c;I/O操作可以立即返回&#xff0c;但是并不保证I/O操作成功…

关于aio

AIO 是异步非阻塞 同步意味着&#xff0c;在进行读写操作时&#xff0c;线程需要等待结果&#xff0c;还是相当于闲置 异步意味着&#xff0c;在进行读写操作时&#xff0c;线程不必等待结果&#xff0c;而是将来由操作系统来通过回调方式由另外的线程来获得结果 AIO的read方…

linux AIO

AIO 是 Linux 下的异步读写模型&#xff0c;它是 2.6 内核提供的一个标准增强特性。对于文件的读写&#xff0c;即使以 O_NONBLOCK 方式来打开一个文件&#xff0c;也会处于 “阻塞” 状态&#xff0c;因为文件时时刻刻处于可读状态&#xff0c;而从磁盘到内存所等待的时间是惊…

AIO模型

目录 AIO模型介绍 AsynchronousServerSocketChannel&#xff1a;AIO中网络通信服务端的socket 1、future方法 2、callback回调方式 AIO 的回调方式编程 BIO、NIO、AIO的比较 1、释义 BIO&#xff1a;同步阻塞IO模型 NIO&#xff1a;同步非阻塞IO模型 AIO&#xff1a;…

java中IO模型-AIO模型

AIO模型介绍 AIO&#xff08;Asynchronous I/O&#xff09; 异步非阻塞模型&#xff0c; 在javajdk.17版本开始支持AIO&#xff0c;AIO模型需要操作系统的支持。 AIO最大的特性是异步能力&#xff0c;对socket和I/O起作用。 异步IO模型类似的 与NIO模型不同&#xff0c;读写操…

架构解密从分布式到微服务:深入理解网络,AIO

AIO AIO是I/O模型里一个很高的层次&#xff0c;体现了大道至简的软件美学理念。与NIO相比&#xff0c;AIO的框架和使用方法相对简单很多。 AIO包括两大部分:AIO Files解决了文件的异步处理问题&#xff0c;AIO Sockets解决了Socket的异步处理问题。AIO的核心概念为应用发起非…

BIO,NIO,AIO区别

BIO,NIO,AIO 总结 Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。程序员在使用这些 API 的时候&#xff0c;不需要关心操作系统层面的知识&#xff0c;也不需要根据不同操作系统编写不同的代码。只需要使用Java的API就可以了。 在讲 BIO,NIO,…

Apache CXF - 快速指南

Apache CXF - 简介 在当今的环境中&#xff0c;您可以使用多个选项来创建 Web 服务应用程序。您可以使用多种标准和广泛接受的协议中的一种或多种进行通信。例如SOAP、XML/HTTP、RESTful HTTP和CORBA&#xff08;通用对象请求代理架构&#xff0c;在过去非常流行&#xff0c;但…

java cxf 安全_CXF client在并发下的线程安全问题

这个是发生在上周周末的真实案例&#xff0c;因为cxf client 端线程安全导致的错误&#xff0c;总结出来希望其他使用cxf的兄弟注意。 首先描述一下背景&#xff0c;简单的说就是使用cxf作为web service的客户端&#xff0c;运行在weblogic上&#xff0c;连接外部的服务器。为了…

linux cxf服务端,Apache CXF 框架应用实战

一、概述 Apache CXF提供了用于方便地构建和开发WebService的可靠基础架构。它允许创建高性能和可扩展的服务&#xff0c;可以部署在Tomcat和基于Spring的轻量级容器中&#xff0c;也可以部署在更高级的服务器上&#xff0c;例如Jboss、WebSphere或WebLogic。 CXF提供了以下功能…

使用CXF调用WSDL

简介 时隔多年&#xff0c;再次遇到需要调用WebService的业务&#xff0c;对方给予的wsdl说明文档还是内网的链接&#xff0c;并且设有基础访问权限&#xff0c;即在浏览器打开wsdl链接时需要输入【用户名密码】登录后方可查看wsdl文档&#xff0c;这需要设置代理&#xff08;我…

spring5.x cxf3.4.x 服务端和客户端 非maven版本

文章目录 一、资料准备1. 官网链接2. 解压3. 依赖梳理 二、spring集成cxf2.1.创建spring项目2.2. 创建接口2.3. impl2.4. spring-cxf.xml2.5. 客户端2.6. 开源项目 一、资料准备 1. 官网链接 http://cxf.apache.org/download.html 下载apache-cxf-3.4.5.zip 2. 解压 3. 依赖…