Java一些过时方法与替换(不定时更新)

Java一些过时方法与替换(不定时更新)

因为使用的jdk为11,所以大家会改到var这个弱类型,请注意

1. MediaType

jdk8已过时

 /** @deprecated */
 @Deprecated
 public static final MediaType APPLICATION_JSON_UTF8;
 /** @deprecated */
 @Deprecated
 public static final String APPLICATION_JSON_UTF8_VALUE = "application/json;charset=UTF-8";

替换jdk8

// 1.方式一 原有替换
public static final MediaType APPLICATION_JSON = new MediaType("application", "json");
public static final String APPLICATION_JSON_VALUE = "application/json";
// 2.方式二 自己创建
var mt = new MediaType("application", "json", StandardCharsets.UTF_8)
var APPLICATION_JSON_UTF8_VALUE = "application/json;charset=UTF-8";
2.SpringCloudGateway

新版本中过时

// 建议使用reactive方式的客户端发现
@Deprecated
public DiscoveryClientRouteDefinitionLocator(DiscoveryClient discoveryClient,
	DiscoveryLocatorProperties properties) {
this(discoveryClient.getClass().getSimpleName(), properties);
serviceInstances = Flux
		.defer(() -> Flux.fromIterable(discoveryClient.getServices()))
		.map(discoveryClient::getInstances)
		.subscribeOn(Schedulers.boundedElastic());
}

替换

public DiscoveryClientRouteDefinitionLocator(ReactiveDiscoveryClient discoveryClient,
			DiscoveryLocatorProperties properties) {
		this(discoveryClient.getClass().getSimpleName(), properties);
		serviceInstances = discoveryClient.getServices()
				.flatMap(service -> discoveryClient.getInstances(service).collectList());
	}
3.ObjectMapper

在使用ObjectMapper做序列化的时候

var om = new ObjectMapper();
// 此方法以及过时
om.enableDefaultTyping(ObjectMapper.DefaultTyping.NON_FINAL);

替换

// 和上面那个有相同的效果,但功能性更强
om.activateDefaultTyping(LaissezFaireSubTypeValidator.instance ,
                ObjectMapper.DefaultTyping.NON_FINAL, JsonTypeInfo.As.PROPERTY);
4. 反射获取对象(newInstance())

jdk9中过时

var a = Object.class;
// 此方法在jdk9过时.此方法传播null构造函数抛出的任何异常,包括已检查的异常。使用此方法有效地绕过了编译时异常,否则将由编译器执行检查.
var o = a.newInstance(); //get对象

替换

// 先初始化再获取对象
var o = a.getConstructor().newInstance();
5.dubbo
import org.apache.dubbo.config.annotation.Service;
@Service
import org.apache.dubbo.config.annotation.Reference;
@Reference
// 这两个注解在dubbo 2.7.0版本开始已经过时

替换

@DubboService
@DubboReference
6.ServletRequest
// 参数
HttpServletRequest request
// 方法
request.getRealPath("xxx"); 

替换

// 可以使用session方式
 request.getSession().getServletContext().getRealPath(File.separator) 
// 如果在Tomcat9、jdk1.8环境下可以用: 
 request.getServletContext().getRealPath(File.separator);
7.RedisConnectionFactory中创建
@Bean("RedisConnectionFactory")
    public RedisConnectionFactory initRedisConnectionFactory() {

        JedisPoolConfig poolConfig = new JedisPoolConfig();
        //最大空 清数
        poolConfig.setMaxIdle(30);
        //最大连接数
        poolConfig.setMaxTotal(50);
        //最大等待毫秒数
        poolConfig.setMaxWaitMillis(2000);
        //创建 Jedis 连接工厂
        JedisConnectionFactory connectionFactory = new JedisConnectionFactory(poolConfig);
        // 在spring-boot-data-2.0后过时
        connectionFactory.setHostName("192.168.11.131");
        connectionFactory.setPort(6379);
        connectionFactory.setPassword("123456");
        return connectionFactory;
    }

替换

@Bean("RedisConnectionFactory")
    public RedisConnectionFactory redisConnectionFactory() {
        // 配制连接池
        var config = new JedisPoolConfig();
        config.setMaxIdle(30);
        config.setMaxTotal(50);
        config.setMaxWaitMillis(2000);
        // 替换使用构造器方式
        //获得默认的连接池构造器
        JedisClientConfiguration.JedisPoolingClientConfigurationBuilder jpcb =
               (JedisClientConfiguration.JedisPoolingClientConfigurationBuilder) JedisClientConfiguration.builder();
        jpcb.poolConfig(config);
        var jedisClientConfiguration = jpcb.build();
        // 配制连接
        String hostName = "127.0.0.1";
        int port = 6379;
        var redisStandaloneConfiguration = new RedisStandaloneConfiguration(hostName, port);

        // 创建jedis连接工厂
        return new JedisConnectionFactory(redisStandaloneConfiguration, jedisClientConfiguration);
    }
8.Springboot 集成Elasticsearch使用方式的改变

这次是对我使用的spring-boot-starter-data-elasticsearch版本更改后一些使用方式的改变所对应的是2.2.2->2.3.8的版本对应的es中6.84->7.6.2(7版本不再有type)(实际过期时间有时间再补doge)。es6与es7的更改具体可以看官网(我写这个的时候已经7.11.0了,哈哈学不动了~)

连接

@Configuration
public class ElasticsearchTemplateConfig extends ElasticsearchConfigurationSupport {

    @Bean
    public Client elasticsearchClient() throws UnknownHostException {
        var settings = Settings.builder().put("cluster.name", "elasticsearch").build();
        var client = new PreBuiltTransportClient(settings);
        client.addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
        return client;
    }

    @Bean(name = {"elasticsearchOperations", "elasticsearchTemplate"})
    public ElasticsearchTemplate elasticsearchTemplate() throws UnknownHostException {
        return new ElasticsearchTemplate(elasticsearchClient(),entityMapper());
    }

    @Bean
    @Override
    public EntityMapper entityMapper() {
        var entityMapper = new ElasticsearchEntityMapper(elasticsearchMappingContext(),
                new DefaultConversionService());
        entityMapper.setConversions(elasticsearchCustomConversions());
        return entityMapper;
    }
}

替换

spring:
  elasticsearch:
    rest:
      connection-timeout: 10s
      uris: http://127.0.0.1:9200

模板类

@Resource
private ElasticsearchTemplate elasticsearchTemplate;

替换

// 之前的那个类已经不见了
@Resource
private ElasticsearchRestTemplate elasticsearchRestTemplate;

建言

// 设置completion属性
var tags = new CompletionSuggestionBuilder("tags")
            .prefix(prefix)
            .skipDuplicates(true);
// 设置suggest体
var suggestBuilder = new SuggestBuilder()
                .addSuggestion("tags_suggest",tags);
// 指定_source
var searchRequestBuilder = elasticsearchTemplate.getClient()
                .prepareSearch("news")//指定索引名
                .suggest(suggestBuilder)
                .setFetchSource(new String[]{"id"}, new String[]{});
// 底层List使用的泛型
var suggestList = searchRequestBuilder.get()
                .getSuggest()
                .getSuggestion("tags_suggest")
                .getEntries();

替换

// 设置completion属性
var tags = new CompletionSuggestionBuilder("tags").prefix(prefix).skipDuplicates(true);
// 设置suggest体
var suggestBuilder = new SuggestBuilder().addSuggestion("tags_suggest", tags);
// 匹配资源
var sourceBuilder = new SearchSourceBuilder().suggest(suggestBuilder).fetchSource(new String[]{"id"}, new String[]{});
// 查询请求 多了一步构建查询请求并且设置source
var searchRequest = new SearchRequest("news").source(sourceBuilder);
// 查询建言 可以之前使用suggest()方法,但是设置不了source
var entries = elasticsearchRestTemplate
                .execute(client -> client.search(searchRequest, RequestOptions.DEFAULT))
                .getSuggest()
                .getSuggestion("tags_suggest")
                .getEntries();

分页

// searchQueryBuilder构建查询条件
AggregatedPage<EsDoc> page = elasticsearchTemplate.queryForPage(searchQueryBuilder, EsDoc.class,
				new SearchResultMapper() {});

替换

// SearchHits封装了es返回数据 searchQueryBuilder构建查询条件
SearchHits<EsDoc> searchHits = elasticsearchRestTemplate.search(searchQueryBuilder, EsDoc.class);

未完

  • 7
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值