小编Ami*_*leb的帖子

Java8 Lambdas与匿名类

由于Java8最近已经发布,并且它的全新lambda表达式看起来非常酷,我想知道这是否意味着我们习以为常的Anonymous类的消亡.

我一直在研究这个问题,并找到了一些很酷的例子,说明Lambda表达式将如何系统地替换这些类,例如Collection的sort方法,它用于获取Comparator的Anonymous实例来执行排序:

Collections.sort(personList, new Comparator<Person>(){
  public int compare(Person p1, Person p2){
    return p1.firstName.compareTo(p2.firstName);
  }
});
Run Code Online (Sandbox Code Playgroud)

现在可以使用Lambdas完成:

Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName));
Run Code Online (Sandbox Code Playgroud)

而且看起来非常简洁.所以我的问题是,有没有理由继续在Java8中使用这些类而不是Lambdas?

编辑

同样的问题,但在相反的方向,使用Lambdas而不是匿名类有什么好处,因为Lambdas只能用于单个方法接口,这个新功能只是在少数情况下使用的快捷方式还是真的有用?

java lambda anonymous-class java-8

103
推荐指数
4
解决办法
6万
查看次数

Spring Cloud微服务内存使用情况

我在AWS上的小型/中型机器上运行多个微服务(Spring cloud + docker),最近我发现这些机器经常耗尽并需要重新启动.我正在研究这种断电的原因,考虑可能的内存泄漏或实例/容器上的错误配置.

我试图通过这样做来限制这些容器可以使用的内存量:

docker run -m 500M --memory-swap 500M -d my-service:latest
Run Code Online (Sandbox Code Playgroud)

此时,我的服务(带有一个单一端点的标准Spring云服务,使用spring-data-redis将内容写入Redis数据库)甚至都没有启动.

增加内存760M并使其工作,但使用docker监控它我发现最小值是:

CONTAINER           CPU %               MEM USAGE / LIMIT       MEM %               NET I/O             BLOCK I/O             PIDS
cd5f64aa371e        0.18%               606.9 MiB / 762.9 MiB   79.55%              102.4 MB / 99 MB    1.012 MB / 4.153 MB   60
Run Code Online (Sandbox Code Playgroud)

我添加了一些参数来限制JVM内存堆,但它似乎并没有减少它:

_JAVA_OPTIONS: "-Xms8m -Xss256k -Xmx512m"
Run Code Online (Sandbox Code Playgroud)

我在跑

  • Spring Cloud Brixton.M5
  • Spring Boot 1.3.2
  • Java 8(Oracle JVM)
  • 搬运工人
  • Spring数据Redis 1.7.1

有这么简单的服务使用如此多的内存来运行的原因吗?是否有任何我应该禁用的功能来改进它?

memory performance docker spring-cloud

8
推荐指数
2
解决办法
3320
查看次数

Spring cloud配置组织文件夹中的文件

我正在尝试在我的Git仓库中的文件夹中组织一组配置文件.我在Spring Cloud Docs中读到了这可以这样做:

HTTP服务具有以下形式的资源:

/{application}/{profile}[/{label}] 

/{application}-{profile}.yml

/{label}/{application}-{profile}.yml

/{application}-{profile}.properties

/{label}/{application}-{profile}.properties
Run Code Online (Sandbox Code Playgroud)

所以我按照第一个模式创建了我的配置结构:

app1/uat/application.yml

但Config服务找不到它.它并没有真正说明配置文件文件夹中的文件应该是什么样子,并且在任何地方我都看到了第2和第4个模式的示例.

第一种模式真的有效吗?谁能举个例子?

java git spring spring-cloud-config

7
推荐指数
1
解决办法
4679
查看次数

为什么变量必须在匿名方法中是最终的,而类字段则不是

如果我有这个匿名方法,我应该声明x变量为final.

private void testMethod (ListField<BeanModel> listField){

     final ListLoader<BeanModel> loader = new PagedListLoader<BeanModel>();
     listField.addListener(Events.Attach, new Listener<ListViewEvent<BeanModel>>() {

            @Override
            public void handleEvent(ListViewEvent<BeanModel> be) {
                loader.load();
            }
          });
}
Run Code Online (Sandbox Code Playgroud)

但是,如果loader是一个类字段,则没有必要将其声明为final:

public class testClass{

    private ListLoader<BeanModel> loader = new PagedListLoader<BeanModel>();

    private void testMethod (ListField<BeanModel> listField){
        listField.addListener(Events.Attach, new Listener<ListViewEvent<BeanModel>>() {

                    @Override
                    public void handleEvent(ListViewEvent<BeanModel> be) {
                        loader.load();
                    }
                  });

        //Could I modify loader's reference here, before the method executes?
        //loader = null;
        }
}
Run Code Online (Sandbox Code Playgroud)

有没有人知道为什么他们保证局部变量在被访问时不会改变但是没有为类字段做?

java attributes anonymous-methods

5
推荐指数
2
解决办法
2310
查看次数

Directory.exists在c#编码中为映射驱动器返回false

Directory.Exists()在我的Windows服务(使用C#,3.5框架编程)中使用,以检查驱动器中是否存在特定目录.当我在本地机器上运行它工作正常,这意味着我能够访问该目录.

但是,当我在虚拟机上部署Windows服务并启动该服务时,即使该目录存在,也无法找到该目录.目录映射为

 Q: drive, Q:\\temp\\local\\ folder 
Run Code Online (Sandbox Code Playgroud)

但是对于Directory.Exists(),Windows服务总是返回false.

但是,当我C:\ drive代替Q:\它工作,但不适用于映射驱动器.我已尝试使用UNC路径,并确保映射驱动器具有管理权限,实际上具有读取,写入和执行权限.但它仍然是假的.

谁能告诉我为什么?以及如何解决?

c# directory

5
推荐指数
1
解决办法
1万
查看次数

使用Picasso的Android内存和磁盘缓存http客户端

我正在使用Picasso将图像加载到容器中.我想缓存在内存中并缓存在磁盘中.在磁盘中缓存图像的最佳方法是什么?什么是http客户端是最好的选择?

这些是我的要求:

  • 首先检查内存中的缓存
  • 检查磁盘中的缓存
  • 从服务器获取图像.

如果映像在磁盘上 - >检查缓存间隔(max-age)并在服务器验证图像是否过时.服务器需要在标头中if_none_match: eTag.

我已经读过这个功能是在OkHttp api中构建的,但我不知道如何使用它.我希望有人能给我发一些链接,文档或者你可以考虑的任何其他不同的方式.

android caching disk httpclient picasso

5
推荐指数
0
解决办法
479
查看次数

春季启动 log4j 模式

我正在从 logback 迁移到 log4j,并且必须在 Spring Boot 中为 Log4j 复制默认配置。

到目前为止,这就是我所拥有的,但它看起来不像上一个。

log4j.category.org.springframework=INFO
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n
Run Code Online (Sandbox Code Playgroud)

我试图让它看起来像这样:

2014-03-05 10:57:51.112  INFO 45469 --- [           main] org.apache.catalina.core.StandardEngine  : Starting Servlet Engine: Apache Tomcat/7.0.52
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.a.c.c.C.[Tomcat].[localhost].[/]       : Initializing Spring embedded WebApplicationContext
2014-03-05 10:57:51.253  INFO 45469 --- [ost-startStop-1] o.s.web.context.ContextLoader            : Root WebApplicationContext: initialization completed in 1358 ms
2014-03-05 10:57:51.698  INFO 45469 --- [ost-startStop-1] o.s.b.c.e.ServletRegistrationBean        : Mapping servlet: 'dispatcherServlet' to [/]
2014-03-05 10:57:51.702  INFO 45469 --- [ost-startStop-1] …
Run Code Online (Sandbox Code Playgroud)

log4j spring-boot

5
推荐指数
2
解决办法
3598
查看次数

多个Spring PropertyPlaceholderConfigurer同时出现

我有两个项目,其中一个(服务)包括第二个项目(核心).我在Core项目中定义了下面的PropertyPlaceholderConfigurer:

<bean id="propertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations">
         <list>
             <value>classpath:appConfig.properties</value>
         </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

我想在上层项目中扩展Core占位符,包括appConfig.properties和其他一些.我发现的唯一方法是在上层定义另一个不同的bean(不同的ID)并包含新的bean:

<bean id="servicesPropertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations">
          <list>
                <value>classpath:swagger.properties</value>
          </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

但它产生它无法找到appConfig.properties,我想它只是同时使用这些PropertyPlaceholderConfigurer之一?是否需要在上层propertyConfigurer中指定所有资源?:

<bean id="servicesPropertyConfigurer" class="org.springframework.context.support.PropertySourcesPlaceholderConfigurer">
    <property name="locations">
          <list>
                <value>classpath:swagger.properties</value>
                <value>classpath:appConfig.properties</value>
          </list>
    </property>
</bean>
Run Code Online (Sandbox Code Playgroud)

扩展Core bean是否可以同时使用?

java spring

4
推荐指数
2
解决办法
1万
查看次数

使用Spring Cloud从微服务中获取外部IP

我正试图从我的一个微服务中获取外部服务.我使用Spring Cloud,Eureka作为注册表,Spring引导作为主要框架.

Map<String, String> urlVariables = new HashMap<>();
    urlVariables.put("ip_address", IP);
    urlVariables.put("port", PORT);

    ResponseObject state =
            restTemplate.getForObject("http://{ip_address}:{port}/state/", ResponseObject.class, urlVariables);
Run Code Online (Sandbox Code Playgroud)

从我看到,Spring Cloud将Ribbon作为Rest模板的HTTP客户端注入,当我尝试命中此IP(例如193.172.x.x:)时,它会产生以下错误:

java.lang.IllegalStateException:在org.springframework.http.client.support.HttpAccessor.createRequest(HttpAccessor)的org.springframework.cloud.netflix.ribbon.RibbonClientHttpRequestFactory.createRequest(RibbonClientHttpRequestFactory.java:64)中没有可用于193.172.xx的实例.java:76)org.springframework.wee执行(RestTemplate.java:567)org.springframework.web.client.RestTemplate.exe(RestTemplate.java:540)org.springframework.web上的org.springframework.web.client.RestTemplate.doExecute(RestTemplate.java:567). client.RestTemplate.getForObject(RestTemplate.java:247)

看起来Ribbon似乎试图找到一个具有该名称的微服务实例而不是向外看.有没有办法配置功能区来查找外部IP,还是只供内部使用?

java spring-boot spring-cloud netflix-eureka netflix-ribbon

4
推荐指数
1
解决办法
600
查看次数