欢迎访问shiker.tech

请允许在我们的网站上展示广告

您似乎使用了广告拦截器,请关闭广告拦截器。我们的网站依靠广告获取资金。

【译文】springboot核心功能-国际化、json、与任务调度
(last modified Nov 28, 2023, 9:35 PM )
by
侧边栏壁纸
  • 累计撰写 186 篇文章
  • 累计创建 65 个标签
  • 累计收到 4 条评论

目 录CONTENT

文章目录

【译文】springboot核心功能-国际化、json、与任务调度

橙序员
2022-08-20 / 0 评论 / 0 点赞 / 681 阅读 / 12 字 / 正在检测百度是否收录... 正在检测必应是否收录...
文章摘要(AI生成)

5.国际化Spring Boot 支持本地化消息,以便您的应用程序可以满足不同语言偏好的用户。默认情况下,Spring Bootmessages在类路径的根目录中查找资源包的存在。当配置的资源包的默认属性文件可用时(messages.properties默认情况下),自动配置适用。如果您的资源包仅包

5.国际化

Spring Boot 支持本地化消息,以便您的应用程序可以满足不同语言偏好的用户。默认情况下,Spring Boot在类路径的根目录中查找messages资源包的存在。

当配置的资源包的默认属性文件可用时(默认情况下为messages.properties),自动配置适用。如果您的资源包仅包含特定于语言的属性文件,则需要添加默认值。如果没有找到与任何配置的基本名称匹配的属性文件,则不会有自动配置的 MessageSource
可以使用spring.messages命名空间配置资源包的基本名称以及其他几个属性,如下例所示:

spring.messages.basename=messages,config.i18n.messages
spring.messages.fallback-to-system-locale=false

spring.messages.basename支持以逗号分隔的位置列表,可以是包限定符,也可以是从类路径根解析的资源。
更多支持选项,请参阅MessageSourceProperties

6.JSON

Spring Boot 提供与三个 JSON 映射库的集成:

  • gson
  • Jackson
  • JSON-B

Jackson 是首选的默认库。

6.1. Jackson

提供了 Jackson 的自动配置,并且 Jackson 是spring-boot-starter-json. 当 Jackson 在类路径上时,ObjectMapper会自动配置一个 bean。提供了几个配置属性用于自定义ObjectMapper.

6.1.1. 自定义序列化器和反序列化器

如果您使用 Jackson 来序列化和反序列化 JSON 数据,您可能需要编写自己的JsonSerializer类和JsonDeserializer类。自定义序列化程序通常通过模块向 Jackson 注册,但 Spring Boot 提供了一个@JsonComponent注解,可以更轻松地直接注册 Spring Bean。

您可以直接在JsonSerializer JsonDeserializerKeyDeserializer实现上使用@JsonComponent注释。您还可以在包含序列化器/反序列化器作为内部类的类上使用它,如以下示例所示:

@JsonComponent
public class MyJsonComponent {

    public static class Serializer extends JsonSerializer<MyObject> {

        @Override
        public void serialize(MyObject value, JsonGenerator jgen, SerializerProvider serializers) throws IOException {
            jgen.writeStartObject();
            jgen.writeStringField("name", value.getName());
            jgen.writeNumberField("age", value.getAge());
            jgen.writeEndObject();
        }

    }

    public static class Deserializer extends JsonDeserializer<MyObject> {

        @Override
        public MyObject deserialize(JsonParser jsonParser, DeserializationContext ctxt) throws IOException {
            ObjectCodec codec = jsonParser.getCodec();
            JsonNode tree = codec.readTree(jsonParser);
            String name = tree.get("name").textValue();
            int age = tree.get("age").intValue();
            return new MyObject(name, age);
        }

    }

}

ApplicationContext中的所有@JsonComponentbean 都会自动向 Jackson 注册。因为@JsonComponent是用元注解的@Component,所以通常的组件扫描规则适用。

Spring Boot 还提供了JsonObjectSerializerJsonObjectDeserializer基类,它们在序列化对象时提供了标准 Jackson 版本的有用替代方案。有关详细信息,请参阅JsonObjectSerializerJsonObjectDeserializer的Javadoc。

上面的例子可以重写为使用JsonObjectSerializer/JsonObjectDeserializer如下:

@JsonComponent
public class MyJsonComponent {

    public static class Serializer extends JsonObjectSerializer<MyObject> {

        @Override
        protected void serializeObject(MyObject value, JsonGenerator jgen, SerializerProvider provider)
                throws IOException {
            jgen.writeStringField("name", value.getName());
            jgen.writeNumberField("age", value.getAge());
        }

    }

    public static class Deserializer extends JsonObjectDeserializer<MyObject> {

        @Override
        protected MyObject deserializeObject(JsonParser jsonParser, DeserializationContext context, ObjectCodec codec,
                JsonNode tree) throws IOException {
            String name = nullSafeValue(tree.get("name"), String.class);
            int age = nullSafeValue(tree.get("age"), Integer.class);
            return new MyObject(name, age);
        }

    }

}

6.1.2. 混合

Jackson 支持 mixins,可用于将其他注解混合到已在目标类上声明的注释中。Spring Boot 的 Jackson 自动配置将扫描您应用程序的包以查找带有@JsonMixin注解的类,并将它们注册到自动配置的ObjectMapper中。通过 Spring Boot 的JsonMixinModule注册.

6.2. gson

提供了 Gson 的自动配置。当 Gson 在类路径上时,会自动配置一个Gson bean。提供了几个spring.gson.*配置属性用于自定义配置。要进行更多控制,可以使用一个或多个GsonBuilderCustomizer bean。

6.3. JSON-B

提供了 JSON-B 的自动配置。当 JSON-B API 和实现在类路径上时,将自动配置一个Jsonb bean。首选的 JSON-B 实现是为其提供依赖管理的 Apache Johnzon。

7. 任务执行与调度

在上下文中没有Executorbean 的情况下,Spring Boot 自动配置一个具有合理的默认值的ThreadPoolTaskExecutor,这些默认值可以自动关联到异步任务执行 ( @EnableAsync) 和 Spring MVC 异步请求处理。

如果您在上下文中定义了自定义Executor,则常规任务执行(即@EnableAsync)将透明地使用它,但配置不会支持 Spring MVC ,因为它需要对AsyncTaskExecutor进行实现(名为applicationTaskExecutor)。根据您的目标安排,您可以将您的Executor更改为 ThreadPoolTaskExecutor或定义 ThreadPoolTaskExecutorAsyncConfigurer包装自定义的Executor。自动配置TaskExecutorBuilder允许您轻松创建实例来重现自动配置默认执行的操作。

线程池使用8个核心线程,可以根据负载增长和收缩。这些默认设置可以使用命名空间进行微调spring.task.execution,如以下示例所示:

spring.task.execution.pool.max-size=16
spring.task.execution.pool.queue-capacity=100
spring.task.execution.pool.keep-alive=10s

这将线程池更改为使用有界队列,以便当队列已满(100 个任务)时,线程池增加到最多 16 个线程。由于线程在空闲 10 秒(而不是默认情况下为 60 秒)时被回收,因此池的收缩更具侵略性。

如果需要与计划的任务执行相关联(例如使用@EnableScheduling),也可以自动配置ThreadPoolTaskScheduler。线程池默认使用一个线程,可以使用命名空间spring.task.scheduling微调其设置,如下例所示:

spring.task.scheduling.thread-name-prefix=scheduling-
spring.task.scheduling.pool.size=2

如果需要创建自定义执行程序或调度程序,则TaskExecutorBuilderbean 和TaskSchedulerBuilderbean 在上下文中都可用。

0

评论区