Micronaut 中的 Springs 资源是不是有等价物?

Posted

技术标签:

【中文标题】Micronaut 中的 Springs 资源是不是有等价物?【英文标题】:Is there an equivalent for Springs Resource in Micronaut?Micronaut 中的 Springs 资源是否有等价物? 【发布时间】:2019-04-21 13:08:16 【问题描述】:

我正在将一个小型 Spring Boot 应用程序迁移到 Micronaut 1.0.1,我想知道是否有 org.springframework.core.io.Resource 的等效项及其实现,例如 ClasspathResource

在 Spring Boot 中,我使用其构造函数将资源注入服务。

@Service
public class MyService() 

    private final Resource resource;

    public MyService(Resource resource)  this.resource = resource; 

如何在 Micronaut 中做到这一点?

@Singleton
public class MyService() 

    private final Resource resource;

    @Inject
    public MyService(Resource resource)  this.resource = resource; 

【问题讨论】:

【参考方案1】:

在 Micronaut 中,您可以使用 io.micronaut.core.io.ResourceLoader 变体,例如 io.micronaut.core.io.scan.ClassPathResourceLoaderio.micronaut.core.io.file.FileSystemResourceLoader。获得它们的一种方法是通过io.micronaut.core.io.ResourceResolver

ClassPathResourceLoader loader = new ResourceResolver().getLoader(ClassPathResourceLoader.class).get();
Optional<URL> resource = loader.getResource("classpath:foo/bar.txt");

【讨论】:

【参考方案2】:

我使用了io.micronaut.core.io.ResourceLoader。通过构造函数连接:

@Controller("root")
public class MyController 

    private final ResourceLoader loader;

    public MyController(ResourceLoader loader) 
        this.loader = loader;
    

    @Get("/index")
    @Produces(MediaType.TEXT_html)
    public String greet() throws IOException 
        return new String(loader.getResourceAsStream("index.html").get().readAllBytes());
    

我的index.html 的路径:src/main/resources/index.html

【讨论】:

【参考方案3】:

ResourceLoader 效果很好,但你可以做得更好。在 Micronaut 中,您可以使用 io.micronaut.core.io.Readable。大致相当于Spring的Resource。您还可以在ConfigurationProperties 中使用Readable,从而将您的配置yaml/properties 直接绑定到Readable 属性:

micronaut:
  application:
    name: Demo
images:
  image-file: "classpath:images/bismarckia-nobilis.jpg"
  # image-file: "file:/path/to/images/bismarckia-nobilis.jpg"
  other-files:
    - "classpath:images/bismarckia-nobilis.jpg"
    - "classpath:images/bamboo.jpg"
    - "classpath:images/hibiscus.jpg"

我已经创建了:

博文:https://hillert.com/blog/from-resource-to-readable/ 演示:https://github.com/ghillert/resource-readable-demo

【讨论】:

以上是关于Micronaut 中的 Springs 资源是不是有等价物?的主要内容,如果未能解决你的问题,请参考以下文章

覆盖 Micronaut 测试中的依赖项

Micronaut 微服务中的 CORS

Micronaut - 解析属性文件中的占位符

micronaut 中的 H2 默认 jdbc url 是啥

如何安装 Micronaut CLI?

使用 Micronaut 应用程序为 JUnit5 中的每个单元/集成测试运行一次 TestContainer