4

我正在将一个小型 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; }
}
4

3 回答 3

10

在 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");
于 2018-11-19T13:07:44.613 回答
3

我用过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.htmlsrc/main/resources/index.html

于 2020-05-08T18:07:57.117 回答
2

ResourceLoader效果很好,但你可以做得更好。在 Micronaut 中,您可以使用io.micronaut.core.io.Readable. 它大致相当于 Spring 的Resource. 您还可以ReadableConfigurationProperties中使用,从而将配置 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"

我创造了:

于 2020-12-08T21:16:37.620 回答