我知道GZIP是LZ77和Huffman编码的组合,可以配置1-9之间的级别,其中1表示最快的压缩(压缩较少),9表示最慢的压缩方法(最佳压缩).
我的问题是,级别的选择是否只会影响压缩过程,还是因为压缩的级别而导致解压缩还会产生额外的成本?
我问,因为如果客户支持它,通常很多Web服务器会动态地进行GZIP响应,例如Accept-Encoding: gzip
.我很欣赏在飞行时这样做6级的水平可能是普通情况的好选择,因为它在速度和压缩之间提供了良好的平衡.
但是,如果我有一堆静态资产,我可以提前GZIP一次 - 而且永远不需要再次这样做 - 使用最高但最慢的压缩级别会有任何不利之处吗?即,如果使用较低的压缩级别,则客户端现在会产生额外的开销.
我知道可以使用@JsonView(...)
静态定义Spring MVC中的单个视图类来注释控制器方法.不幸的是,这意味着我可能需要为每种类型的视图提供不同的端点.
我看到其他人之前已经问过这件事.虽然这种方法可行,但Spring通常有很多方法可以做同样的事情.如果您对某些内部结构有一些了解,有时候解决方案可能比最初出现的要简单得多.
我想拥有一个可以根据当前主体动态选择适当视图的控制器端点.我是否可以Model
使用包含相应视图类或可能MappingJacksonValue
直接实例的属性返回?
我看到org.springframework.http.converter.json.AbstractJackson2HttpMessageConverter#writeInternal
有一段代码可以确定要使用的视图:
if (value instanceof MappingJacksonValue) {
MappingJacksonValue container = (MappingJacksonValue) object;
value = container.getValue();
serializationView = container.getSerializationView();
}
Run Code Online (Sandbox Code Playgroud)
这似乎来自org.springframework.web.servlet.mvc.method.annotation.JsonViewResponseBodyAdvice#beforeBodyWriteInternal
但我无法解决,如果有一种方法可以绕过这只是简单地返回一个包含必要信息的特定值Jackson2HttpMessageConverter
来选择正确的视图.
任何帮助非常感谢.
我有一个简单的sprint启动应用程序1.5.11.RELEASE
,@EnableCaching
在Application Configuration
类上使用spring boot .
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-cache</artifactId>
</dependency>
<dependency>
<groupId>com.github.ben-manes.caffeine</groupId>
<artifactId>caffeine</artifactId>
</dependency>
Run Code Online (Sandbox Code Playgroud)
spring.cache.type=caffeine
spring.cache.cache-names=cache-a,cache-b
spring.cache.caffeine.spec=maximumSize=100, expireAfterWrite=1d
Run Code Online (Sandbox Code Playgroud)
我的问题很简单,如何为每个缓存指定不同的大小/到期时间.也许它可能cache-a
是有效的1 day
.但cache-b
也许可以1 week
.关于咖啡因缓存的规范似乎是全局的,CacheManager
而不是Cache
.我错过了什么吗?也许我的用例有更合适的提供商?
我在使用MockMvc测试Spring Boot应用程序时遇到了一些麻烦.
我有以下测试类:
@RunWith(SpringJUnit4ClassRunner.class)
@SpringApplicationConfiguration(classes = {SpringConfiguration.class, SecurityConfiguration.class})
@IntegrationTest({"server.port=8080"})
@WebAppConfiguration
public class DemoTest {
@Autowired
private EmbeddedWebApplicationContext webApplicationContext;
private MockMvc mockMvc;
@Before
public void setUp() throws Exception {
mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
}
@Test
public void testGetAccountUnauthenticated() throws Exception {
mockMvc.perform(get("/accounts/1").accept(MediaType.APPLICATION_JSON))
.andExpect(status().isUnauthorized());
}
}
Run Code Online (Sandbox Code Playgroud)
这导致HTTP 200而不是401.我启用了组件扫描和自动配置,并在我的SecuityConfiguration类中配置了spring安全性,如下所示:
@Configuration
@EnableWebSecurity
@EnableWebMvcSecurity // required for use of @AuthenticationPrincipal in MVC controllers.
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
@Override
public void configure(WebSecurity web) {
web.debug(true);
}
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
//set …
Run Code Online (Sandbox Code Playgroud) spring-security spring-test spring-test-mvc spring-boot mockmvc
我正在尝试将一个域的所有流量重定向到另一个域.我没有专门为此工作运行服务器,而是尝试使用带有lambda的AWS API Gateway来执行重定向.
我对根路径"/"的工作正常,但是没有处理任何子路径请求,例如/ a.有没有办法定义"catch all"资源或通配符路径处理程序?
有谁知道是否可以将现有的AWS Elastic Beanstalk环境更改为应用程序负载均衡器(而不是经典的).
据我所知,只有应用程序ELB可以使用AWS WAF和DDOS"Shield"进行保护,因此任何现有的EB应用程序都无法利用这些功能,因为它们具有经典的ELB.
amazon-web-services amazon-elb amazon-elastic-beanstalk amazon-waf
是否有人能够解释为什么Spring Boot Docker Guide建议/tmp
按如下方式添加卷:
VOLUME /tmp
它解释说:
我们添加了一个指向"/ tmp"的VOLUME,因为这是Spring Boot应用程序默认为Tomcat创建工作目录的地方.效果是在"/ var/lib/docker"下的主机上创建一个临时文件,并将其链接到"/ tmp"下的容器.
但是,我不清楚为什么你想要/需要这样做.
如果java应用程序在容器的/ tmp目录中创建了任何文件,我看不出需要将它配置为卷,因为据我所知,它会导致文件绕过union文件系统并被写入持久地在Docker主机上/var/lib/docker
.这是否也会导致容器中创建的"临时"文件在容器停止时不会被自动删除?
我的春季启动应用程序(确实创建临时文件)似乎没有这个运行正常VOLUME
,但我想知道是否有任何负面后果不遵循这个建议.
谢谢.
我在使用Spring Boot在多模块Maven项目中以所需顺序应用一些Spring配置时遇到了一些麻烦.
我有模块A和B,由我编写,依赖于第三方模块,我无法在模块C中控制(依赖关系如下:A取决于C,B取决于A)
在模块AI中有一个带有注释的类@Configuration
,也有@AutoConfigureBefore(ClassFromModuleD.class)
.在模块BI有另一个类注解为@Configuration
和也@AutoConfigureBefore(ClassFromModuleA.class)
我希望这会导致我的模块B中的bean定义首先被配置,然后是我的模块A配置类中的bean,然后是C中的bean.
我还尝试向META-INF/spring.factories
模块A和B 添加一个文件,它声明了自己模块中存在的单个配置文件.例如,对于模块A.
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.exmaple.moduleAConfiguration
在模块B中:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.exmaple.moduleBConfiguration
我没有看到所需的配置顺序,事实上,它似乎与我想要的完全相反.我已经使用了日志语句和调试器来逐步完成,似乎首先应用模块C的配置,然后是A,最后是B.
任何人都可以指出我可能错过了什么,或者有没有其他方法可以做到这一点?首先十分感谢.
我们正在构建一个使用Android读取NFC标签的原型应用程序.但是,由于我们使用的是名为ACR1255U-J1的外置蓝牙读卡器,因此我们不使用嵌入式NFC读卡器和Android SDK.
我们使用的NFC芯片是带有v0.4命令集的Mifare Desfire EV1 8k.我认为这些被称为包装APDU命令,因为我认为EV1 v0.4不支持完整的ISO APDU命令集.
由于我们使用外部蓝牙读卡器(这是业务需求),我们不相信我们能够使用Android NFC SDK,而是需要使用蓝牙读卡器制造商提供的SDK.
无论如何,目前要读取8k的有效载荷,它需要花费超过25秒.我们怀疑,虽然还没有正式验证,但部分原因在于我们通过以下方式读取数据的方式:
每个帧大小最多为59个字节,因此我们理解即使我们要求在一个读取命令中读取更大的有效载荷(例如100k或整个8k),我们仍然只能在一个响应帧中获得59个字节的数据.
这导致我们执行131个单独的读取命令,每个命令然后阻塞并等待数据,然后将每个59字节段拼接在一起以获得有效负载.
由于命令是从Android应用程序,然后到蓝牙读卡器,然后到NFC卡,然后从卡和通过蓝牙读卡器返回到应用程序131次我们想知道这是否是花费的大部分时间.
我们正在尝试找到更好的方法来分析/调试问题.显然,由于使用Android NFC API的板载NFC阅读器能够在几秒钟内读取数据,因此可以更快地读取.
有没有人对我们的问题是什么或我们如何加快这一点有任何建议.
我知道在 Kotlin 类中会自动创建一个 equals 和 hashcode,如下所示:
data class CSVColumn(private val index: Int, val value: String) {
}
Run Code Online (Sandbox Code Playgroud)
我的问题是,有没有办法让实现只使用这些属性之一(例如index
),而无需自己编写代码。原本非常简洁的类现在看起来像这样:
data class CSVColumn(private val index: Int, val value: String) {
override fun equals(other: Any?): Boolean {
if (this === other) {
return true
}
if (javaClass != other?.javaClass) {
return false
}
other as CSVColumn
if (index != other.index) {
return false
}
return true
}
override fun hashCode(): Int {
return index
}
}
Run Code Online (Sandbox Code Playgroud)
在带有 Lombok 的 Java 中,我可以执行以下操作: …
spring-boot ×4
amazon-elb ×1
amazon-waf ×1
android ×1
apdu ×1
bluetooth ×1
caffeine ×1
compression ×1
docker ×1
gzip ×1
json-view ×1
kotlin ×1
mifare ×1
mockmvc ×1
nfc ×1
spring-cache ×1
spring-mvc ×1
spring-test ×1