我是Spring框架和Spring Boot的新手.
我已经实现了一个非常简单的RESTful Spring Boot Web应用程序.
您可以在另一个问题中看到几乎完整的源代码:Spring Boot:如何外部化JDBC数据源配置?
app如何服务外部静态HTML,css js文件?
例如,目录结构可能如下:
MyApp\
MyApp.jar (this is the Spring Boot app that services the static files below)
static\
index.htm
images\
logo.jpg
js\
main.js
sub.js
css\
app.css
part\
main.htm
sub.htm
Run Code Online (Sandbox Code Playgroud)
我已经阅读了构建包含静态HTML文件的.WAR文件的方法,但由于它需要重建和重新部署WAR文件,即使在单个HTML文件修改时,该方法也是不可接受的.
一个确切而具体的答案是可取的,因为我对Spring的了解非常有限.
Spring Boot文档说我们可以在application.properties文件中设置属性.
但是我找不到列出可以设置的可用属性的文档.
我在哪里可以找到这样的文件?
例如,我想为嵌入式servlet设置documentRoot.
我发现setDocumentRoot()方法是在AbstractEmbeddedServletContainerFactory.java中实现的.
但我不知道何时何地调用该方法,或者可以在application.properties中设置的属性名称.
我认为应该很容易,因为Spring Boot的目的是简化配置.
提前致谢.
更新:
正如M. Deinum建议的那样,我将'server.document-root:someDirectoryName'添加到application.properties,但发生了以下错误.
Caused by: org.springframework.beans.NotWritablePropertyException: Invalid property 'document-root' of bean class [org.springframework.boot.context.embedded.properties.ServerProperties]: Bean property 'document-root' is not writable or has an invalid setter method. Does the parameter type of the setter match the return type of the getter?
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1057)
at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:915)
at org.springframework.beans.AbstractPropertyAccessor.setPropertyValues(AbstractPropertyAccessor.java:82)
at org.springframework.validation.DataBinder.applyPropertyValues(DataBinder.java:730)
at org.springframework.validation.DataBinder.doBind(DataBinder.java:626)
at org.springframework.boot.bind.RelaxedDataBinder.doBind(RelaxedDataBinder.java:78)
at org.springframework.validation.DataBinder.bind(DataBinder.java:611)
at org.springframework.boot.bind.PropertiesConfigurationFactory.doBindPropertiesToTarget(PropertiesConfigurationFactory.java:232)
at org.springframework.boot.bind.PropertiesConfigurationFactory.bindPropertiesToTarget(PropertiesConfigurationFactory.java:204)
at org.springframework.boot.context.properties.ConfigurationPropertiesBindingPostProcessor.postProcessAfterInitialization(ConfigurationPropertiesBindingPostProcessor.java:312)
... 31 more
Run Code Online (Sandbox Code Playgroud)
我认为这是因为实现了org.springframework.boot.context.embedded.properties.ServerProperties的方式.(参见https://github.com/spring-projects/spring-boot/blob/97cb7f096798ecd016de71f892fa55585d45f5eb/spring-boot/src/main/java/org/springframework/boot/context/embedded/properties/ServerProperties.java)
它声明'@ConfigurationProperties(name ="server",ignoreUnknownFields = false)'.因此,它管理以"server"开头的应用程序属性,并禁止使用未知属性名称.
它不支持documentRoot …
我想设置一个带有嵌入式tomcat会话群集的Spring Boot应用程序.
由于嵌入式tomcat没有server.xml文件,因此我创建了一个TomcatEmbeddedServletContainerFactory并以编程方式设置集群配置.代码如下:
@Configuration
public class TomcatConfig
{
@Bean
public EmbeddedServletContainerFactory servletContainerFactory()
{
return new TomcatEmbeddedServletContainerFactory()
{
@Override
protected TomcatEmbeddedServletContainer getTomcatEmbeddedServletContainer(
Tomcat tomcat)
{
configureCluster(tomcat);
return super.getTomcatEmbeddedServletContainer(tomcat);
}
private void configureCluster(Tomcat tomcat)
{
// static membership cluster
SimpleTcpCluster cluster = new SimpleTcpCluster();
cluster.setChannelStartOptions(3);
{
DeltaManager manager = new DeltaManager();
manager.setNotifyListenersOnReplication(true);
cluster.setManagerTemplate(manager);
}
{
GroupChannel channel = new GroupChannel();
{
NioReceiver receiver = new NioReceiver();
receiver.setPort(localClusterMemberPort);
channel.setChannelReceiver(receiver);
}
{
ReplicationTransmitter sender = new ReplicationTransmitter();
sender.setTransport(new PooledParallelSender());
channel.setChannelSender(sender);
}
channel.addInterceptor(new …Run Code Online (Sandbox Code Playgroud) 我正在使用OpenLayers 3实现地图导出功能.
但是有一个问题:人们无法确定地图视图是否已完全加载或者是否缺少一些图块.
似乎没有这样的API或事件.最接近的是tileloadstart - tileloadend对.但OpenLayers异步加载切片,并且在切片实际加载之前,不会触发tileloadstart - 也就是说,在切片队列中排队的切片不会在实际加载之前触发该事件.
我可以检测到地图视图是否已完全加载?
看起来,insertMany()将ordered 选项设置为false 的MongoDB函数比将ordered 选项设置为true 可以更有效地插入文档。即使多个文档插入失败,它也可以继续插入文档。
但是我发现没有一种干净的方法可以同时获取每个失败文档的错误和整体命令结果。
(顺便说一句,我正在使用 Node.js 驱动程序 API 2.2。从现在开始我将参考驱动程序的源代码:http : //mongodb.github.io/node-mongodb-native/2.2/api/lib_collection.js.html )
首先,如果使用 Promise,则无法同时获取错误和结果。在源代码行 540 上,insertMany()返回错误或结果 - 不是两者,而bulkWrite()回调在源代码行 703 上返回两者。
其次,如果使用回调,事情会变得更糟。当bulkWrite()调用带有错误和结果的回调时,会同时调用带有错误和结果insertMany()的回调,但结果是 BulkWrite 的结果,而不是正确转换为 InsertManyResults 的结果。请参阅源代码第 535 行。我认为这是一个错误。
即使对于bulkWrite(),当错误数为 1 时,它也不会将结果正确转换为其格式。请参阅源代码第669行。我认为这也是一个错误。
现在我认为 Node.js 驱动程序根本没有准备好处理这种情况。
目前,似乎没有办法同时正确获取错误和结果。
我对吗?
更新
我运行了一个基于 Neil Lunn 的回答的测试代码。由于我的 Node.js(4.4.5) 不理解 async/await,我不得不用显式的 Promise 重写测试代码。
测试代码如下:
function doTest()
{
var MongoClient = require('mongodb').MongoClient;
var testData = [ 1,2,2,3,3,4,5,6,7,8,9 ];
var db;
return MongoClient.connect('mongodb://127.0.0.1/test')
.then(function (_db) …Run Code Online (Sandbox Code Playgroud) 在组件的<script setup>块中,我可以使用inject() 访问插件。
但是我如何provide()在以后的use()插件中访问其他插件呢?
我希望传递给插件函数的对象app.inject()中有,但没有这样的函数。appinstall()
也许我可以使用_context该app项目的属性,但这看起来像是一个黑客。
我有以下课程:
public static class ARestRequestParam
{
String name;
LocalDate date; // joda type
}
Run Code Online (Sandbox Code Playgroud)
我希望它可以从杰克逊处理的以下JSON中反序列化.
{name:"abc",date:"20131217"}
实际上,我希望使用"yyyyMMdd"格式反序列化任何类中的任何LocalDate字段,而不重复格式字符串,而不添加任何setter方法,不需要任何XML配置.(也就是说,注释和Java代码更可取)如何才能完成?
另外,我也想知道序列化部分.也就是LocalDate - >"yyyyMMdd".
我见过以下情况:
但我不知道哪个适用,哪个是最新的.
顺便说一句,我使用Spring Boot.
UPDATE
好的,我已经设法为反序列化部分编写工作代码.它如下:
@Configuration
@EnableWebMvc
public class WebMvcConfiguration extends WebMvcConfigurerAdapter
{
@Override
public void configureMessageConverters(
List<HttpMessageConverter<?>> converters)
{
converters.add(jacksonConverter());
}
@Bean
public MappingJackson2HttpMessageConverter jacksonConverter()
{
MappingJackson2HttpMessageConverter converter =
new MappingJackson2HttpMessageConverter();
ObjectMapper mapper = new ObjectMapper();
mapper.registerModule(new ApiJodaModule());
converter.setObjectMapper(mapper);
return converter;
}
@SuppressWarnings("serial")
private class …Run Code Online (Sandbox Code Playgroud) spring-boot ×4
spring ×3
tomcat ×3
format ×1
jackson ×1
javascript ×1
jodatime ×1
mongodb ×1
node.js ×1
openlayers-3 ×1
spring-mvc ×1
vue.js ×1
vuejs3 ×1