问题标签 [spring2.x]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - 从 1.5 升级后 Spring boot 2 @Query 命名参数绑定值解析搞砸了
我们使用 SpringBoot 1.5 有以下工作查询:
请注意我们如何将输入传递给 LIKE:CONCAT('%', :searchString, '%')
从升级springBootVersion = '1.5.17.RELEASE'
到springBootVersion = '2.1.3.RELEASE'
(我们使用 Gradle)后,该查询将在运行时失败并出现异常:
org.hibernate.QueryException:未绑定命名参数:includeDeleted
替换CONCAT('%', :searchString, '%')
为%:searchString%
解决问题。
我的问题是:为什么?
通过进入调试模式并遵循完整的调用堆栈,我可以看到从方法调用中正确检索到的参数,如JdkDynamicAopProxy
在第 205 行中观察到的那样,调用Object[] argsToUse = AopProxyUtils.adaptArgumentsIfNecessary(method, args);
导致:
到目前为止,一切都很好。然后,我们继续,调用的方法也正确解析:
然后我们走得更远,我们到达RepositoryFactorySupport
第 599 行调用private Object doInvoke(MethodInvocation invocation) throws Throwable
,它使用private final Map<Method, RepositoryQuery> queries;
内部类public class QueryExecutorMethodInterceptor implements MethodInterceptor
(我不确定这个变量是何时/如何创建和填充的),其中包含@Query
在我的存储库接口中注释的所有查询。
对于我们的特定情况,它包含一个与我正在调用的查询(findCustomers )匹配的条目(最后一个):
并扩展该条目,我可以看到错误来自哪里,:includeDeleted
命名参数的绑定根本不存在:
现在,我有前面提到的修复程序,但我仍然非常想知道以下内容以供将来参考:
- 何时以及如何
private final Map<Method, RepositoryQuery> queries
创建和填充变量? - 究竟是什么导致了这个错误?我在升级过程中错过了什么吗?我是否在使用/混合不推荐使用的逻辑/错误的逻辑并且应该进一步更改代码?
我们的数据库是 MariaDB 10.1.36
编辑:在所有发生此行为的地方(在某些地方仍然发生),未绑定参数始终是最后一个
EDIT2:别人升级后也有类似的行为,为什么会这样?参考
EDIT3:参考和这种奇怪的行为也被报道了。有趣的是,如果我将已经连接的输入传递给 :searchString(例如:%SOMETHING%),我不会得到异常,如果我离开 %:searchString% 会得到异常。是的,最终移动这些参数可以解决我在绑定时遇到的一些错误。
EDIT4:也许相关的错误?
显然发生了一些奇怪的事情,所以:这个绑定解决方案究竟是如何发生的?
提前致谢,祝您有美好的一天
java - Spring Boot MVC - 如何在 application.properties 中配置多视图目录
我正在尝试使用 Spring MVC Boot 应用程序,目前正在使用 springBootVersion = '2.1.6.RELEASE'。
我有数百个“.jsp”文件放置在多个子目录中,这些子目录位于我的 Web 应用程序的“视图”目录中,我正在尝试查看如何在 application.properties 文件中定义属性以搜索 jsp 文件在所有子目录中,而不仅仅是查看目录。
目前,只有当它们位于子文件夹之外,即“view”文件夹中时,应用程序才能找到 jsp 页面。
下面是我的项目目录结构和 application.properties 文件的截图。
每个目录(例如be、ca、de、fr)都有自己的jsp页面、图片、css、js等。
我已尝试使用以下 3 个属性值,但它不起作用 -
请告知是否有办法在所有子目录中搜索 jsp 文件。
spring-boot - 自 spring-boot-starter-parent 2.1.12-RELEASE 以来,在 eclipse 中运行时,使用 jetty 的 Spring Boot 服务器默认不会转发到 index.html
更新:此问题存在于 9.4.25.v20191220 的码头中,我已将版本设置回它正确服务的 9.4.24。我不知道这是错误还是配置更改。
也许有人可以提供帮助,我很欣赏这是所有配置问题,但我只有将 spring-boot-starter-parent 从 2.1.10-RELEASE 升级到 2.1.13-RELEASE 时遇到这个问题。
使用 @SpringBootApplication 和其他所有默认设置,但以下 WebMvcConfigurer 除外(在此处的另一篇文章中找到)
使用 Jetty,并且在 \src\resources\public\ 中存在一个 Angular 项目,包括公共目录中的 index.html。
在之前的春季版本中,我可以导航到 localhost:8080,它会自动定向到 localhost:8080/list,这被设置为 Angular 项目索引文件中的重定向。
但是现在使用 2.1.13 我必须明确地转到 localhost:8080/index.html 这确实有效,重定向到 /list 并且我可以浏览网站,但是如果我刷新页面或者如果我明确地转到 :8080/list我得到白标签错误 500
我试过了:
1.
添加各种其他视图控制器规则:
registry.addViewController("/").setViewName("forward:/index.html");
registry.addViewController("/").setViewName("forward:index.html");
registry.addViewController("/**").setViewName("forward:index.html");
......但我不认为这些是问题。
2.
查看 ResourceHandlerRegistry 以查看默认资源位置,因此它应该选择我的 index.html 文件。
3.
添加 spring.resources.static-locations=classpath:/public/xxx/**
然后我去 localhost:8080/xxx/ 或 localhost:8080/xxx/index.html whitelabel 404
由于安全漏洞,我升级了 spring,所以目前很想回到 2.1.10 或 11,并且只提取缓解漏洞所需的依赖版本。我只是想知道出了什么问题,显然不喜欢被打败。
有谁知道是否有春季版本的变更日志可以揭示发生了什么变化?我想这可能是由于任何数量的依赖项目。
spring-boot - 使用 spring 2 和 jersey 的 rest 服务,无法得到一些消费者的响应
我们有一个使用异步响应并将数据写入流的应用程序。
我从 1.5 升级到 spring2。并且不确定它是否可以关联,但现在使用邮递员我收到此错误“文件意外结束”。
即使在 java 客户端中,我也会收到错误“java.IO.EOFException: Unexpected end of zlib input stream”。
但是我在 curl 命令中得到了预期的结果。
现在我怀疑,这可能与 user-agent 或 spring2 或 jersey 中的某处有关,我需要设置一些属性来摆脱它。
没有安全性,我排除了 SecurityAutoConfiguration.java,以防它在某处检查某些用户代理。
由于我在 java 客户端中看到的错误,我尝试使用 server.compression.enabled=false (无论如何都是默认设置),但没有运气。
我想我需要编辑问题。使用 spring2x 的 StreamingOutput 似乎存在一些问题。这不是流式传输,我认为会导致上述所有问题。
任何帮助表示赞赏。
spring - 升级到 Spring Boot 版本 2.3.1.Release 后应用程序无法启动
我正在使用spring boot 2.3.1.RELEASE、spring-cloud-services.version 2.0.0.RC2和spring-cloud.version Hoxton.M1,并在启动应用程序时遇到以下问题:
升级到spring boot 2.3.8.RELEASE和 s pring cloud 到 Hoxton.SR9 后,我收到以下异常:
netflix-zuul - 升级到 Spring 2.5.X 时 Zuul 和 Spring Cloud 网关的替代方法
我们正在将我们的项目升级到 Spring 2.5.X,它不再支持 Zuul 网关。我们不想选择“Spring Cloud Gateway”,因为我们需要在 Reactive 中重写所有代码(我们基于 Servlet)。除了 Zuul 和 Spring Cloud Gateway 之外,还有没有其他好的方法来实现网关路由和过滤?欢迎任何建议。先感谢您。