问题标签 [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.
logging - Spring Boot:如何使用 application.properties 设置日志记录级别?
这是一个非常简单的问题,但我找不到信息。
(也许我对 Java 框架的了解严重不足)
如何使用 application.properties 设置日志记录级别?
和记录文件位置等?
java - Spring Boot 程序化日志配置
如何在 Spring Boot 应用程序中以编程方式配置日志记录?
使用 xml 或属性文件对我的需要不够灵活。
更新:我想实现这样的目标:
我拥有的每个环境是:
- logging.level.root=[信息,调试,..]
- logging.level.myApp=[信息,调试,..]
- 日志记录文件=[真 | 错误的]
没有我真的不想处理的 XML、Groovy 和其他格式的重复。
归根结底,这实际上是为了实现与 Spring JavaConfig 为 bean 所做的相同的日志记录灵活性。XML 或其他文件格式太静态了,需要太多重复,并且与应用程序的其余配置集成得不够好。
为什么日志记录的配置应该与任何其他 bean 或服务不同?这没有道理。
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 上下文执行此操作?
感谢您的帮助!
spring - Spring Boot jetty/tomcat 内嵌访问日志配置
我配置logback.xml
它工作完美但logback-access.xml
不起作用。
在 Maven 中pom.xml
在src/main/resource
有没有办法配置访问日志?
spring-boot - JSP 文件未在 Spring Boot Web 应用程序中呈现
我使用嵌入式 Tomcat(默认)启动并运行了一个 Spring Boot Web 应用程序。当它提供 JSP 文件作为呈现我在控制器中指定的视图的一部分时,JSP 不会被呈现,而是打印出内容。例如:
索引.jsp
当视图在浏览器中呈现时,会显示上面的内容,而不是预期的内容:
spring-mvc - Spring + Jackson + joda time:如何指定序列化/反序列化格式?
我有以下课程:
我希望它从杰克逊处理的以下 JSON 中反序列化。
{名称:“abc”,日期:“20131217”}
实际上,我想反序列化任何具有“yyyyMMdd”格式的类中的任何 LocalDate 字段,而不复制格式字符串,不添加任何 setter 方法,不进行任何 XML 配置。(即注解和Java代码更可取) 怎么做?
另外,我也想知道序列化部分。也就是说,LocalDate -> "yyyyMMdd"。
我看过以下内容:
- 杰克逊数据类型乔达(https://github.com/FasterXML/jackson-datatype-joda)
- 自定义序列化器(公共类 JodaDateTimeJsonSerializer 扩展 JsonSerializer { ... } - Spring @ResponseBody Jackson JsonSerializer with JodaTime)
- @JsonCreator
- @日期时间格式
但我不知道哪个是适用的,哪个是最新的。
顺便说一句,我使用 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 版本,至少目前如此。
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不加载它?我已经尝试过全面搜索,但似乎没有其他人遇到这个问题,所以我不确定它是否只是我配置错误的东西,还是什么。
提前致谢。
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 功能的方法。
也许有一种方法可以添加我自己的HandlerMapping
bean,但我不知道该怎么做。
现在我可以选择以下选项之一:
- 有一个
@EnableWebMvc
因此禁用 Spring Boot类的WebMvcAutoConfiguration
类。(我可以复制WebMvcAutoConfiguration
类的代码并删除图标功能) - 放弃将 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()
.
现在我有一个没有缓存问题的网站图标处理程序,我可以将网站图标文件放在我想要的任何地方。
谢谢。
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 不应该嵌套吗?
java - 为什么添加 @EnableAutoConfiguration 会导致 spring-boot 失败并显示“无法找到要扫描的 JPA 包”
为什么添加@EnableAutoConfiguration
到以下 spring-boot 应用程序会导致它无法创建entityManagerFactory
?如果我删除@EnableAutoConfiguration
一切正常。任何人都可以阐明这种行为吗?
潜在的错误是
完整的输出(包括堆栈跟踪)是 -
Pom提取物 -
任何建议表示赞赏。