CWIKIUS
  • 首页
  • 计算科学
  • 房地产
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Spring
Spring

Spring Could not find unique TaskExecutor bean 错误

这个错误其实是 debug 级别的错误,是不影响运行的。 错误栈为: 020-10-26 15:27:57.726 DEBUG 12844 --- [nio-8080-exec-1] .s.a.AnnotationAsyncExecutionInterceptor : Could not find unique TaskExecutor bean org.springframework.beans.factory.NoUniqueBeanDefinitionException: No qualifying bean of type 'org.springframework.core.task.TaskExecutor' available: expected single matching bean but found 2: applicationTaskExecutor,taskScheduler at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveNamedBean(DefaultListableBeanFactory.java:1200) at org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveBean(DefaultListableBeanFactory.java:420) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:350) at org.springframework.beans.factory.support.DefaultListableBeanFactory.getBean(DefaultListableBeanFactory.java:343) at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.getDefaultExecutor(AsyncExecutionAspectSupport.java:233) at org.springframework.aop.interceptor.AsyncExecutionInterceptor.getDefaultExecutor(AsyncExecutionInterceptor.java:157) at org.springframework.aop.interceptor.AsyncExecutionAspectSupport.lambda$configure$2(AsyncExecutionAspectSupport.java:119) 原因和解决 简单来说就是在你的 @Configuration 中必须要实现一个 AsyncConfigurer 来为 @Async 指定一个 TaskExecutor 执行的方法。 package com.insight.sco.service.config; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.AsyncConfigurer; import org.springframework.scheduling.annotation.EnableAsync; import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor; import org.springframework.stereotype.Component; import java.util.concurrent.Executor; /** * AsyncConfigurer for Spring * * @author YuCheng Hu */ @Configuration @Component @EnableAsync public class TaskExecutorConfig implements AsyncConfigurer{ /** * Override Config * * @return */ @Override public Executor getAsyncExecutor(){ ThreadPoolTaskExecutor taskExecutor = new ThreadPoolTaskExecutor(); taskExecutor.setCorePoolSize(10); taskExecutor.setMaxPoolSize(80); taskExecutor.setQueueCapacity(100); taskExecutor.initialize(); return taskExecutor; } } 可以将上面的方法拷贝放到你 Spring 的项目中,这样你的 Spring 项目就可以告诉应用的上下文使用哪一个异步方法。     https://www.ossez.com/t/spring-could-not-find-unique-taskexecutor-bean/614  

2020年10月27日 0Comments 410Browse 0Like Read more
Spring

Spring Boot 项目上传日志到 Azure Application Insights

Azure 提供了一个 Application Insights 工具。 这个工具可以对 Spring Boot 项目中的 API 请求,日志进行分析。 你需要做的就是在你的 Spring Boot 项目中配置好依赖和参数后,Spring Boot 项目启动后就会自动将日志上传到 Azure 供分析。 配置 Azure   不管怎么用,Azure 都首先需要进行配置。 我们现在针对配置的是日志删除到 Azure 上进行日志分析。 Log Analytics workspaces 我们首先需要配置一个 Log Analytics workspaces,搜索资源 Log Analytics workspaces。       在弹出的界面中将会显示已经配置好的日志分析工作空间。 如果你还没有的话,你需要创建一个。 单击界面上的 Add 按钮,进行新建。       在新建的对话框中你需要对你的费用订购部分进行配置。 如果你还没有配置的话,你可能需要到 Azure 的控制台中配置信用卡。 在第二部分输入的是名称和区域,名称可以根据需要命名,区域的话,选一个离你最近的就可以了。       在配置完上面的参数后,创建就可以了。 Application Insights 在最上面的搜索框中搜索 Application Insights 然后你会看到 Application Insights 的界面,单击左侧的添加按钮来添加一个应用。       这里也有几个配置,在最上面的是费用计算和订购。 中间的部分是有关资源的名称。 在最下面的就是有关日志的配置了,因为要在这里进行选择,这就是为什么我们需要首先配置日志工作空间的原因,否则是没有办法配置日志的。       在一切配置妥当后,单击最下面的预览并创建即可。 在创建成功后,你的项目会获得一个 Instrumentation Key,这个是需要配置到你 Spring Boot 项目中的。 现在你可以先拷贝下来。       Spring 项目 在Spring 项目中需要进行一些调整就可以了。 maven 依赖 你需要为你的项目添加 Maven 依赖。 <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-logging-logback</artifactId> <version>2.6.2</version> </dependency> 上面的依赖将会将日志上传需要的类添加进来。 application.properties 在 Spring Boot 配置文件中,添加下面的参数 # Azure Application Insights azure.application-insights.instrumentation-key=[开始让你拷贝的 ID] spring.application.name=[Azure 中定义的名称] 根据上面在 Azure 的配置,将上面的参数修改为你的 Azure 配置。 logback.xml 因为我们的项目使用的是 logback 为日志,因此我们需要在 logback.xml 中添加下面的内容。 <appender name="aiAppender" class="com.microsoft.applicationinsights.logback.ApplicationInsightsAppender"> <instrumentationKey>[开始让你拷贝的 ID]</instrumentationKey> </appender> <!-- APPENDER-REF --> <root level="debug"> <appender-ref ref="aiAppender"/> </root> 上面的内容非常简单,就是将日志级别为 debug 的全部输出到 Azure 上面去。 在官方的代码中,这里使用了日志级别为 TRACE,我们不建议使用。因为这样会输出非常多的日志,让你的访问非常缓慢。 查看结果 当所有配置完成以后,开始在你的本地运行你的 Spring Boot 应用程序。 稍等一些时间后登录 Azure,然后选择 Transaction search。 在界面中你可能看不到任何数据,你需要单击界面中的显示所有 24 小时内的数据。       如果你能看到程序删除的日志,主要是查看时间,那么就说明一切都已经配置好了。     https://www.ossez.com/t/spring-boot-azure-application-insights/609

2020年10月23日 0Comments 278Browse 0Like Read more
Spring

Spring Boot 和 Hibernate 的 H2 数据库配置来进行启动测试

希望在 Spring Boot 中配置 H2 数据库来进行功能测试。 如何进行配置能来让启动的时候自动载入数据和进行测试? Maven 依赖 如果你的 Spring 项目中没有添加 H2 的依赖,你需要在 Maven 中添加。 使用的参数为: <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>1.4.199</version> </dependency> 配置 application.properties 在 Spring 配置文件中进行一些配置能够在 Spring Boot 中载入数据并且进行调用。 我们可以使用下面的一些配置: spring.h2.console.enabled=true spring.h2.console.path=/h2-console spring.datasource.driverClassName=org.h2.Driver spring.datasource.url=jdbc:h2:mem:scodb;DB_CLOSE_ON_EXIT=FALSE spring.datasource.username=sa spring.datasource.schema=classpath:db/schema.sql 配置和参数的说明。 spring.h2.console.enabled 在 Spring Boot 后启用控制台,用户可以通过 Web 界面来访问 H2 的控制台。 spring.h2.console.path 网页界面中通过 URL 可以访问控制台的地址,这个地址可以自由和任意修改。 spring.datasource.driverClassName H2 的 JDBC 驱动名称,你需要配置这个才能够通过 JDBC 访问启动后的 H2 数据库。 spring.datasource.url Spring 项目中数据源的连接参数,在这个参数中你定义了一个数据库的名称为 scodb,在通过网页界面进行访问的时候,会提醒你输入连接参数。 在输入连接参数的时候,你需要输入和上面连接参数一致的配置。 spring.datasource.username 访问数据库的用户名,你可以输入任何名称,在通过网页访问的时候,你需要输入的用户名为这个。 如果你不指定密码参数的话,那么密码就为空。 spring.datasource.schema Spring 启动的时候需要载入的 sql 文件。这个文件将会在 Spring 启动后被执行,创建数据库表和插入测试数据等。 Hibernate 参数配置 假设我们的 Hibernate 使用的是 HikariCP 连接池。 我们需要为你的 Hibernate 配置以下的连接参数。 hibernate.properties 文件 hibernate.connection.driver_class=org.h2.Driver hibernate.connection.url=jdbc:h2:mem:scodb;DB_CLOSE_ON_EXIT=FALSE hibernate.hikari.dataSource.user=sa hibernate.dialect = org.hibernate.dialect.H2Dialect 上面的连接参数为Hibernate 需要的,你需要先进行配置,才能让 HikariCP 连接池获得数据源。 hibernate.cfg.xml Hibernate 配置参数 通过下面的配置来对 Hibernate 的连接池参数进行配置。 <property name="hibernate.connection.provider_class">com.zaxxer.hikari.hibernate.HikariConnectionProvider </property> <property name="hibernate.hikari.minimumIdle">5</property> <property name="hibernate.hikari.maximumPoolSize">10</property> <property name="hibernate.hikari.idleTimeout">30000</property> 首先你需要提供连接池的 类。 hibernate.hikari.minimumIdle 这个配置参数连接池中保持的最少的连接数。 hibernate.hikari.maximumPoolSize 连接池中保持最多的连接数 hibernate.hikari.idleTimeout 在连接池中一个连接允许最长被限制的时间。 如果一切顺利,当你启动 Spring Boot 的时候,你应该能够在控制台上看到连接池中的连接保持情况。 https://www.ossez.com/t/spring-boot-hibernate-h2/608

2020年10月23日 0Comments 327Browse 0Like Read more
Spring

Spring 配置的 H2 控制台 frameOptions 导致无法访问

Spring H2 控制台访问登录以后的内容无法显示。 访问的时候会看到下面的情况。     解决办法 这个主要是 Spring 安全设置的问题。 在 Spring 中的 frameOptions 配置为 iframe 的安全配置。 X-Frame-Options 头主要是为了防止站点被别人劫持,所以 iframe 将会在 Spring Security 中默认是拒绝设置的。以防止点击劫持攻击。 要修改这个配置,你可以在 Spring 安全配置中进行下面的配置: httpSecurity.headers().frameOptions().disable(); 上面的选项是完全允许 iframe 。 或者你也可以配置下面: httpSecurity.headers().frameOptions().sameOrigin(); X-Frame-Options 有三个值: DENY 表示该页面不允许在 frame 中展示,即便是在相同域名的页面中嵌套也不允许。 SAMEORIGIN 表示该页面可以在相同域名页面的 frame 中展示。 ALLOW-FROM uri 表示该页面可以在指定来源的 frame 中展示。     因为我们的控制台配置的是 localhost, 因此我们可以使用 sameOrigin(),因此产生的效果是一样。 https://www.ossez.com/t/spring-h2-frameoptions/607

2020年10月23日 0Comments 306Browse 0Like Read more
Spring

Spring 数据初始 H2 后进行数据查询提示 Schema not found 错误

在运行测试的错误有提示下面的错误: Caused by: org.h2.jdbc.JdbcSQLSyntaxErrorException: Schema "DBO" not found; SQL statement: select myscofile0_.id as id1_1_0_, myscofile0_.dateC as datec2_1_0_, myscofile0_.dateM as datem3_1_0_, myscofile0_.uuid as uuid4_1_0_, myscofile0_.client_id as client_i5_1_0_, myscofile0_.file_name as file_nam6_1_0_, myscofile0_.file_row_count as file_row7_1_0_, myscofile0_.file_status as file_sta8_1_0_ from dbo.MYSCOFILE myscofile0_ where myscofile0_.id=? [90079-200] at org.h2.message.DbException.getJdbcSQLException(DbException.java:576) at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) at org.h2.message.DbException.get(DbException.java:205) at org.h2.message.DbException.get(DbException.java:181) at org.h2.command.Parser.readTableFilter(Parser.java:1940) at org.h2.command.Parser.parseSelectFromPart(Parser.java:2827) 问题和解决 出现上面的问题是在 JPA 实例的时候配置了 schema = "dbo, 但是 H2 数据库进行初始化的时候没有创建 schema。     针对上面的问题,你需要在你的 H2 初始化的时候创建一个 schema。 创建 schema 的脚本为: CREATE SCHEMA IF NOT EXISTS DBO; SET SCHEMA DBO; 通过添加下面的脚本,将会在 H2 中创建 Schema,然后可以通过控制台中查看创建的情况。     在完成上面的配置后,再重新运行你的测试,你就会看到上面的错误已经没有错误了。 https://www.ossez.com/t/spring-h2-schema-not-found/605

2020年10月22日 0Comments 423Browse 0Like Read more
Spring

Spring 数据初始化的时候没有执行 SQL

Spring Boot 项目在启动的时候可以对 H2 中的数据库进行初始化。 一般来说我们会定义下面的参数: spring.datasource.data=classpath:h2-data.sql 但是在 Spring Boot 项目运行以后,我们通过 H2 的控制台查看数据库的时候,发现 SQL 脚本没有执行。 问题原因和解决 我们都知道 Spring 数据库有下面 2 个配置参数:spring.datasource.schema 和 spring.datasource.data。 spring.datasource.schema 中定义的是数据库执行脚本,包括创建数据库表和关系等 DDL 脚本。 Spring 中这里有个小坑,如果在配置参数中不定义 spring.datasource.schema, 而直接spring.datasource.data 定义的话,spring.datasource.data 中定义的脚本是不会执行的。 因此你需要先定义 spring.datasource.schema,可以做的是: 在 resources 文件夹中定义一个空的 schema.sql 文件。 将所有的创建数据库脚本和插入数据的脚本放到 spring.datasource.schema 中定义     然后通过控制台可以查看根据数据库创建脚本创建的数据库表。   https://www.ossez.com/t/spring-sql/603

2020年10月22日 0Comments 280Browse 0Like Read more
Spring

Spring 日志输出错误字符 -e[0;39m e[2m[

Spring 的日志在输出的时候,出现了类似 -e[0;39m e[2m[ 的错误。     原因和问题解决 能够出现上面的原因是你的控制台输出工具不支持 ANSI 彩色字符,但是你的 Spring 配置文件中又强制了使用彩色字符。 查找你的 Spring 配置文件:application.properties 中的配置: spring.output.ansi.enabled=ALWAYS 如果你看到上面的参数是 ALWAYS 的话,你需要调整使用为:DETECT 这个配置选项有 3 个参数: ALWAYS:总是输出彩色日志 DETECT:根据控制台的情况确定是否输出彩色日志 NEVER:永远不输出彩色日志 修改后的配置参数应该为: spring.output.ansi.enabled=DETECT     然后重新编译后重新运行。 然后检查日志后,你就可以发现你的日志能够显示正常,而不是显示错误的字符了。     其实上面的特殊字符就是 Spring 日志文件中的配色, ANSI 会根据上面的配色来进行显示。   https://www.ossez.com/t/spring-0-39m-2m/599

2020年10月21日 0Comments 329Browse 0Like Read more
Spring

Spring Azure applicationinsights 运行时出现 tcnative 错误

启动运行的时候出现错误: 2020-10-20 12:01:21.628 DEBUG 69140 --- [ main] i.n.util.internal.NativeLibraryLoader : netty_tcnative_windows_x86_64 cannot be loaded from java.library.path, now trying export to -Dio.netty.native.workdir: C:\Users\yhu\AppData\Local\Temp java.lang.UnsatisfiedLinkError: no netty_tcnative_windows_x86_64 in java.library.path: [C:\Dkits\Java\OpenJDK\11.0.4\bin, C:\windows\Sun\Java\bin, C:\windows\system32, C:\windows, %JAVA_HOME%\bin, %MAVEN_HOME%\bin, %GRADLE_HOME%\bin, C:\Program Files (x86)\NetSarang\Xshell 6\, C:\windows\system32, C:\windows, C:\windows\System32\Wbem, C:\windows\System32\WindowsPowerShell\v1.0\, C:\windows\System32\OpenSSH\, C:\Program Files (x86)\Webex\Webex\Applications, C:\Program Files (x86)\Plantronics\Spokes3G\, C:\Program Files (x86)\Enterprise Vault\EVClient\x64\, C:\Program Files (x86)\Intel\Intel(R) Management Engine Components\DAL, C:\Program Files\Intel\Intel(R) Management Engine Components\DAL, C:\Program Files\Intel\WiFi\bin\, C:\Program Files\Common Files\Intel\WirelessCommon\, C:\Program Files\PuTTY\, C:\Program Files (x86)\GnuWin32\bin\, C:\Program Files\nodejs\, C:\Program Files (x86)\Yarn\bin\, C:\Users\yhu\Dkits\protoc\bin\, C:\Program Files\Git\cmd, C:\Program Files\TortoiseGit\bin, C:\Program Files\TortoiseSVN\bin, C:\Program Files\Amazon\AWSCLIV2\, C:\Program Files (x86)\Microsoft SQL Server\150\DTS\Binn\, C:\Dkits\Java\OpenJDK\11.0.4\bin, C:\Users\yhu\Dkits\maven\bin, C:\Users\yhu\Dkits\scala\bin, C:\Dkits\gradle\bin, C:\Users\yhu\AppData\Local\Microsoft\WindowsApps, C:\Users\yhu\AppData\Local\atom\bin, C:\Users\yhu\AppData\Local\Programs\Microsoft VS Code\bin, C:\Users\yhu\AppData\Local\GitHubDesktop\bin, C:\Users\yhu\AppData\Roaming\npm, C:\Users\yhu\AppData\Local\Yarn\bin, C:\Users\yhu\Dkits\protoc\bin, .] at java.base/java.lang.ClassLoader.loadLibrary(ClassLoader.java:2660) at java.base/java.lang.Runtime.loadLibrary0(Runtime.java:829) at java.base/java.lang.System.loadLibrary(System.java:1867) 错误原因和分析 这个错误的原因是包的冲突。     如果你的配置文件中有下面 2 个包。 这 2 个包是冲突的。 <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>applicationinsights-spring-boot-starter</artifactId> <version>1.1.1</version> </dependency> <dependency> <groupId>com.microsoft.azure</groupId> <artifactId>spring-cloud-azure-appconfiguration-config</artifactId> <version>1.2.7</version> </dependency> 所以你需要将 spring-cloud-azure-appconfiguration-config 这个包删除后才可以启动。   https://www.ossez.com/t/spring-azure-applicationinsights-tcnative/595

2020年10月21日 0Comments 259Browse 0Like Read more
Spring

Spring security CSRF 跨域访问限制问题

在我们写 Spring 安全的时候通常有这么一句话: httpSecurity.csrf().disable(). 从这句话的字面意思就很明白就是禁用 csrf,什么是 csrf,为什么要禁用可能就一脸懵逼了。 因为你很有可能会遇到一个错误: HTTP Status 403-Invalid CSRF Token 'null' was found on the request parameter '_csrf' or header 'X-CSRF-TOKEN'. 这个就是做 Web 开发的时候非常头痛的跨域访问问题。 Spring Security 后,引入了CSRF,默认是开启。不得不说,CSRF和RESTful技术有冲突。CSRF默认支持的方法: GET|HEAD|TRACE|OPTIONS,不支持POST。 什么是 CSRF ,这是一个 WEB 应用安全的问题,CSRF(Cross-site request forgery 跨站请求伪造,也被称为“One Click Attack” 或者Session Riding,攻击方通过伪造用户请求访问受信任站点。 其实跨域攻击操作过程比较简单,就是如果你不采取任何限制的时候,对 POST 相对风险系数比较高的访问,用户可以伪造请求,然后对服务器进行攻击和修改。 比如说通过 伪造 POST 请求,然后能够将用户的数据删除。 在跨域 (同一个 IP、同一个网络协议、同一个端口,三者都满足就是同一个域,否则就有跨域问题)。为什么在基于网页开发的时候没有这个跨域的问题,但是基于 RETS 开发的时候就非常明显。 这是因为在网页开发的时候,首先服务器会返回 sessionid 到客户端的界面,在客户端向服务器请求的时候,都会带有这个 session id。 但 在 RESTFul 开发的时候,这个情况就没有办法避免,因为我们的 API 会暴露给不同的用户,用户可能也会使用不同的 IP 地址,尤其用户可能还部署了多个服务器的情况下。 因此,我们在 Spring 安全配置下,需要禁用 CSRF。 禁用方法 有你需要在,程序 http 过滤器上禁用。     这个就是你在上面看到的那个代码。 https://www.ossez.com/t/spring-security-csrf/587

2020年10月16日 0Comments 325Browse 0Like Read more
Spring

Spring 的 WebSecurityConfigurerAdapter 过滤器

你需要一个 WebSecurityConfigurerAdapter 来对用户提供安全的校验,确保用户能够访问必要的资源。 一个基于 Spring Boot 的应用程序将会帮你完成安全的校验(通过在 HTTP 的基础授权上添加自己的 WebSecurityConfigurerAdapter)。 这个将会添加 过滤器链表的 Order = 0(这个是默认配置),同时将会保护所有的资源,除非你能够提供正确的配置。 注解 @EnableResourceServer 将会做同样的事情,但是过滤器链表的顺序默认是 Order = 3。 因此可以知道 WebSecurityConfigurerAdapter 和 ResourceServerConfigurerAdapter 都是Spring 使用的过滤器,用来对访问进行过滤的。 但是过滤的顺序是多少呢? WebSecurityConfigurerAdapter 的 @Order(100)     如果我们想让WebSecurityConfigurerAdapter比ResourceServerConfigurerAdapter优先级高的话,只需要让前者的@Order值比后者的@Order值更低就行了。 @EnableResourceServer 的注解的 Order 是 3     在spring 的体系里Order值越小优先级越高,所以ResourceServerConfigurerAdapter优先级比另外一个更高,他会优先处理,而WebSecurityConfigurerAdapter会失效。 所以,在不同在上面 2 个定义的过滤器上面,如果你加了注解,会影响过滤器的调用顺序。     比如说这个注解,因为添加到代码中了,所以这个过滤器会被先调用。 https://www.ossez.com/t/spring-websecurityconfigureradapter/585

2020年10月15日 0Comments 368Browse 0Like Read more
12345
Categories
  • Algorithm(算法)
  • AMQP
  • Angular
  • CI
  • Compile And CI
  • Computer Science
  • Confluence
  • DataBase
  • Gradle
  • Hibernate
  • IDE
  • Java
  • Jersey
  • Jira
  • MariaDB
  • PrestaShop
  • Spring
  • Spring Batch
  • U.S.
  • U.S. Travel
  • USRealEstate
  • VisaFn

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1