问题标签 [spring-boot]

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.

0 投票
18 回答
602490 浏览

logging - Spring Boot:如何使用 application.properties 设置日志记录级别?

这是一个非常简单的问题,但我找不到信息。
(也许我对 Java 框架的了解严重不足)

如何使用 application.properties 设置日志记录级别?
和记录文件位置等?

0 投票
1 回答
14631 浏览

java - Spring Boot 程序化日志配置

如何在 Spring Boot 应用程序中以编程方式配置日志记录?

使用 xml 或属性文件对我的需要不够灵活。

更新:我想实现这样的目标:

我拥有的每个环境是:

  • logging.level.root=[信息,调试,..]
  • logging.level.myApp=[信息,调试,..]
  • 日志记录文件=[真 | 错误的]

没有我真的不想处理的 XML、Groovy 和其他格式的重复。

归根结底,这实际上是为了实现与 Spring JavaConfig 为 bean 所做的相同的日志记录灵活性。XML 或其他文件格式太静态了,需要太多重复,并且与应用程序的其余配置集成得不够好。

为什么日志记录的配置应该与任何其他 bean 或服务不同?这没有道理。

0 投票
1 回答
1041 浏览

java - Spring 应用程序未考虑 spring.schemas

我有一个使用 spring-boot 0.5.0M2 的 Spring 批处理。我使用程序集 jar-with-dependencies 来生成可执行的 JAR 文件。我检查了生成的 JAR 是否具有正确的依赖关系,即所有必需的 Sprinf xsd 都位于它们应该在的位置,并且 spring-boot 插件已经生成了正确的 META-INF/spring.schemas。

我从 Cygwin 终端运行我的应用程序,但由于我的代理需要 NTLM 身份验证,我无法从 Cygwin shell 访问网络。

如果我使用 mvn spring-boot:run 运行我的应用程序,它可以工作。但是在生产中,批处理将使用 java -jar myExecutableJar.jar 运行,我很确定服务器将无法访问 Internet。

在这种情况下,我收到以下错误:

所以我将此解释为应用程序试图下载 spring-beans-3.2 XSD 而不是考虑 spring.schema 并使用 JAR 中存在的类路径资源。

有没有办法强制 Spring 上下文执行此操作?

感谢您的帮助!

0 投票
9 回答
20373 浏览

spring - Spring Boot jetty/tomcat 内嵌访问日志配置

我配置logback.xml它工作完美但logback-access.xml不起作​​用。

在 Maven 中pom.xml

src/main/resource

有没有办法配置访问日志?

0 投票
20 回答
91151 浏览

spring-boot - JSP 文件未在 Spring Boot Web 应用程序中呈现

我使用嵌入式 Tomcat(默认)启动并运行了一个 Spring Boot Web 应用程序。当它提供 JSP 文件作为呈现我在控制器中指定的视图的一部分时,JSP 不会被呈现,而是打印出内容。例如:

索引.jsp

当视图在浏览器中呈现时,会显示上面的内容,而不是预期的内容:

0 投票
1 回答
8570 浏览

spring-mvc - Spring + Jackson + joda time:如何指定序列化/反序列化格式?

我有以下课程:

我希望它从杰克逊处理的以下 JSON 中反序列化。

{名称:“abc”,日期:“20131217”}

实际上,我想反序列化任何具有“yyyyMMdd”格式的类中的任何 LocalDate 字段,而不复制格式字符串,不添加任何 setter 方法,不进行任何 XML 配置。(即注解和Java代码更可取) 怎么做?

另外,我也想知道序列化部分。也就是说,LocalDate -> "yyyyMMdd"。

我看过以下内容:

但我不知道哪个是适用的,哪个是最新的。

顺便说一句,我使用 Spring Boot。

更新

好的,我已经设法为反序列化部分编写了工作代码。如下:

我必须自己实现反序列化器,因为无法更改 jackson-datatype-joda 中反序列化器的日期时间格式。因此,由于我自己实现了反序列化器,因此不需要 jackson-datatype-joda。(虽然我已经复制了它的部分代码)

这段代码好吗?
这是最新的解决方案吗?
还有其他更简单的方法吗?
任何建议将不胜感激。

更新

按照 Dave Syer 的建议,我将上面的源代码修改如下:

删除了 2 个方法:configureMessageConverters()、jacksonConverter()
在 WebMvcConfiguration 类中添加了以下方法:

但现在它不起作用。似乎 apiJodaModule() 被忽略了。
我怎样才能让它工作?
(看来我不应该有一个具有 @EnableWebMvc 的类来使用该功能。)

我使用的版本是 org.springframework.boot:spring-boot-starter-web:0.5.0.M6。

更新

最终工作版本如下:(与我之前在具有@EnableWebMvc 的课程中​​完成的其他配置)
正如 Dave Syer 所提到的,这仅适用于 BUILD-SNAPSHOT 版本,至少目前如此。

0 投票
4 回答
36151 浏览

java - Tomcat 不读取 Spring-Boot 应用程序属性

我对 spring/java 相当陌生,并且一直在为我工作的项目检查 spring-boot。我一直在遵循指南,终于有了一个(半)工作的网络应用程序 MVC + JPA 用于数据访问。当我通过 Jar 方法部署应用程序时,一切正常:

但是,我们的应用程序最终会部署到 Tomcat (v7.0.40),所以我需要从项目中创建一个 war 文件。我已经按照 spring.io 网站上的转换 jars 到 war的指南并遇到了问题。它似乎没有加载 application.properties 文件。以下是重要的代码片段:

src/main/java/hello/GreetingController:

src/main/java/hello/Application.java

src/main/java/hello/HelloWebXml.java

src/main/resources/application.properties

为了完整起见,这里是 build.gradle:

我构建应用程序:

在 tomcat 中删除战争,然后退出日志并查看以下内容:

正如我所说,当我通过 jar 运行它时它可以工作,但是当我将它部署到 Tomcat 时它不起作用。我也看了看里面$TOMCAT_HOME/webapps/client/WEB-INF/classes,我看到了application.properties文件。所以我认为它应该在类路径上。我的问题是,为什么tomcat不加载它?我已经尝试过全面搜索,但似乎没有其他人遇到这个问题,所以我不确定它是否只是我配置错误的东西,还是什么。

提前致谢。

0 投票
8 回答
65250 浏览

spring-mvc - Spring Boot:覆盖网站图标

如何覆盖 Spring Boot 的 favicon?

注意:这是我的另一个问题,它提供了另一个不涉及任何编码的解决方案:Spring Boot: Is it possible to use external application.properties files in any directory with a fat jar? 它用于 application.properties,但也可以应用于 favicon。事实上,我现在正在使用这种方法来覆盖网站图标。

如果我实现一个具有@EnableWebMvc 的类,则Spring Boot 的WebMvcAutoConfiguration 类不会加载,我可以通过将其放置到静态内容的根目录来提供我自己的favicon。

否则,WebMvcAutoConfiguration 注册 faviconRequestHandler bean,(见源码https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/src/main/java/org/springframework/boot/autoconfigure/ web/WebMvcAutoConfiguration.java),它提供了“绿叶”图标,该图标位于 Spring Boot 的主资源目录中。

如何在不自己实现具有 @EnableWebMvc 的类的情况下覆盖它,从而禁用 Spring Boot 的 WebMvcAutoConfiguration 类的整个默认配置功能?

另外,由于我希望在客户端(Web 浏览器)端尽快更新图标文件,因此我想将 favicon 文件的缓存周期设置为 0。(如下面的代码,我用于我的'静态' webapp 内容和脚本文件,在我更改文件后必须尽快在客户端更新。)

所以,仅仅找到 Spring Boot 的 faviconRequestHandler 荣誉的 favicon.ico 文件的保存位置可能还不够。

更新

现在我知道我可以通过将 favicon 文件放置到 src/main/resources 目录来覆盖默认设置。但是缓存期问题仍然存在。
此外,最好将 favicon 文件放置到放置静态 Web 文件的目录,而不是资源目录。

更新

好的,我设法覆盖了默认值。我所做的如下:

基本上,我通过调用 registry.setOrder(Integer.MIN_VALUE) 添加具有最高顺序的资源处理程序来覆盖默认值。

由于 Spring Boot 中的默认值具有顺序值(Integer.MIN_VALUE + 1),(请参阅https://github.com/spring-projects/spring-boot/blob/master/spring-boot-autoconfigure/中的 FaviconConfiguration 类src/main/java/org/springframework/boot/autoconfigure/web/WebMvcAutoConfiguration.java)我的处理程序获胜。

这个可以吗?还有另一种方法(比我做的更温和的方法)吗?

更新

这不好。当我调用时registry.setOrder(Integer.MIN_VALUE),实际上我提高了所有资源处理程序的优先级。因此,当我将以下代码添加到另一个WebMvcConfigurerAdapter时,实际上所有 http 请求都被定向到该资源处理程序,从而防止 Java 代码进行任何动态处理。

需要另一种解决方案。

更新

目前,我找不到覆盖 Spring Boot 提供的 favicon 功能的方法。
也许有一种方法可以添加我自己的HandlerMappingbean,但我不知道该怎么做。

现在我可以选择以下选项之一:

  1. 有一个@EnableWebMvc因此禁用 Spring Boot类的WebMvcAutoConfiguration类。(我可以复制WebMvcAutoConfiguration类的代码并删除图标功能)
  2. 放弃将 favicon 文件放置到任意位置的自由,并按照 Spring Boot 的 favicon 功能需要将其放置到资源目录中。并忽略缓存问题。

但这两种选择都不令人满意。
我只想将 favicon 文件与我的静态 Web 文件(可以是任何目录,因为我可以更改文档根目录)一起放置并解决缓存问题。
我错过了什么吗?
任何建议将不胜感激。

更新

顺便说一句,我想更改 favicon 和其他静态文件的位置的原因如下。目前主要是开发环境问题。

我正在构建一个单页 Web 应用程序(SPA)。

库/框架:

  • 对于服务器端,我使用 Spring。(当然)
  • 对于客户端(网络浏览器)端,我使用 AngularJS。

工具:

  • 对于服务器端,我使用 Spring Tool Suite。
  • 对于客户端,我使用 WebStorm。

主目录结构:

  • src:我的 Spring java 源文件所在的位置。
  • bin:Spring Tool Suite 放置其构建输出的位置。
  • build: 'gradle build' 放置其构建输出的位置。
  • webapp:我的客户端源文件(.js、.css、.htm 和 favicon)所在的位置。因此,这是 WebStorm 项目目录。(如有必要,我可以更改目录名称)

我想要的是:

  • 为了能够修改和测试我的客户端代码,而无需重建/重新启动我的 Spring 服务器应用程序。因此,客户端代码一定不能放入 jar 文件中。无论如何,Spring Tool Suite 根本不构建 jar 文件(至少对于当前配置)
  • 为了能够使用客户端代码测试我的 Spring 服务器应用程序,可以在 Spring Tool Suite 输出和 gradle 输出之间轻松切换。因此,客户端代码必须可以从build子目录中的服务器应用程序(实际上build\libs)和服务器应用程序访问bin目录中的服务器应用程序访问。
  • 当我修改客户端代码时,它必须立即可供 Web 浏览器使用。因此浏览器不能无限期地缓存它,并且必须始终向服务器请求更新。
  • 部署后,客户端代码必须是可修改的,而无需重新构建/重新启动服务器应用程序。所以客户端代码一定不能放到jar文件中。

关于缓存问题:

如果 addResourceHandlers() 上没有 setCachePeriod(0),Google Chrome 会无限期地缓存文件,而不要求服务器进行更新。它甚至不连接到服务器。(谷歌工程师说这种行为是正确的。)所以,我能做的就是手动清除浏览器缓存。它在开发环境中令人沮丧,在生产环境中是不可接受的。

顺便说一句,Node.js 上的 express.js 模块提供了合理的默认 HTTP 标头,以便 Google Chrome 向服务器请求更新。当我查看 Spring 和 express.js 使用 Fiddler 生成的 HTTP 标头时,它们是不同的。

任何改善我的环境的建议将不胜感激。
由于我是 Spring 初学者,因此我可能会遗漏一些东西。

更新

最后我有一个工作代码。如下:

注意 bean 名称。我添加了“我的”以避免名称冲突。
自动装配应用程序上下文本身似乎很尴尬,但它是模仿代码的必要条件org.springframework.web.servlet.config.annotation.ResourceHandlerRegistration.addResourceLocations().

现在我有一个没有缓存问题的网站图标处理程序,我可以将网站图标文件放在我想要的任何地方。
谢谢。

0 投票
2 回答
2216 浏览

spring-mvc - Spring:WebMvcConfigurerAdapter bean 注册了两次

这是Spring + Jackson + joda time的后续问题:如何指定序列化/反序列化格式?.

在写最终版代码的时候,第一次写成这样:(只显示相关部分)

没有 @EnableWebMvc,因为使用了 Spring Boot 的默认 @EnableWebMvc 类。
请注意,userInterceptor bean 在 WebMvcConfigurerAdapter 类中,它也是一个 bean。

当我运行应用程序时,出现以下错误:(
我的类的类路径名被我自己替换为'...')

然后我将 ApiWebMvcConfiguration 类更改为静态内部类。

应用程序“正常”启动,但 ApiWebMvcConfiguration 类被实例化了两次。也就是说,“### ApiWebMvcConfiguration”被打印了两次。因此,“### addInterceptors”被打印了两次。

然后,当 UserIntercepter 的代码运行时,它因为 null @Autowired JdbcTemplate 而失败。也就是说,@Autowired 不适用于该对象。(JdbcTemplate 在其他对象中成功@Autowired)

于是,我把代码改成了最终版本,如Spring + Jackson + joda time:如何指定序列化/反序列化格式?,即UserIntercepter bean被拉出ApiWebMvcConfiguration,问题就没有了。

这是正确的行为吗?
@Bean 不应该嵌套吗?

0 投票
2 回答
63248 浏览

java - 为什么添加 @EnableAutoConfiguration 会导致 spring-boot 失败并显示“无法找到要扫描的 JPA 包”

为什么添加@EnableAutoConfiguration到以下 spring-boot 应用程序会导致它无法创建entityManagerFactory?如果我删除@EnableAutoConfiguration一切正常。任何人都可以阐明这种行为吗?

潜在的错误是

完整的输出(包括堆栈跟踪)是 -

Pom提取物 -

任何建议表示赞赏。