Java単体からマイクロサービスまで不動産販売プラットフォームを構築


概要
最近、ある授業の《Java 》を勉強しています.
Spring Mailアクティブリンク送信
機能実現:ユーザー登録時にspring mailを通じてユーザーにアクティブリンクを送信し、有効期間内にユーザーがリンクをクリックした後、ユーザー状態をアクティブ状態に更新する.
導入spring-mail依存

      org.springframework.boot
      spring-boot-starter-mail
 

設定appliacation.propertiesファイル
#      
domain.name=127.0.0.1:8090
#spring-mail
spring.mail.host=smtp.163.com  #163  
[email protected] 
spring.mail.password=czy123456  #163     
spring.mail.properties.mail.smtp.auth=truehouse
spring.mail.properties.mail.smtp.starttls.enable=true
spring.mail.properties.mail.smtp.starttls.required=true
MailServiceクラス
@Service
public class MailService {

    @Autowired
    private JavaMailSender mailSender;

    @Value("${spring.mail.username}")
    private String from;


    @Value("${domain.name}")
    private String domainName;

    @Autowired
    private UserMapper userMapper;

    //  key-email   ,   15      ,                  
    private final Cache registerCache =
            CacheBuilder.newBuilder().maximumSize(100).expireAfterAccess(15, TimeUnit.MINUTES)
                    .removalListener(new RemovalListener() {

                        @Override
                        public void onRemoval(RemovalNotification notification) {
                            String email = notification.getValue();
                            User user = new User();
                            user.setEmail(email);
                            List targetUser = userMapper.selectUsersByQuery(user);
                            if (!targetUser.isEmpty() && Objects.equal(targetUser.get(0).getEnable(), 0)) {
                                userMapper.delete(email);//     :                  ,              
                            }
                        }
                    }).build();


    /**
     *     
     */
    @Async
    public void sendMail(String title, String url, String email) {
        SimpleMailMessage message = new SimpleMailMessage();
        message.setFrom(from);//     
        message.setSubject(title);//  
        message.setTo(email);//     
        message.setText(url);//  
        mailSender.send(message);
    }

    /**
     * 1.  key-email   
     * 2.  spring mail     
     * 3.            
     *
     * @param email
     */
    @Async
    public void registerNotify(String email) {
        String randomKey = RandomStringUtils.randomAlphabetic(10);
        registerCache.put(randomKey, email);
        String url = "http://" + domainName + "/accounts/verify?key=" + randomKey;
        //    
        sendMail("        ", url, email);
    }
}

Nginxエージェント
前提:ユーザーが画像をアップロードする時、私達はデータベースで相対アドレスを保存して、それから画像をローカルに保存して、ブラウザが画像を展示する必要がある時私達は相対経路を取り出した後に接頭辞の経路をつなぎ合わせて、ここで私達はnginxを使って私達の画像の保存の位置を代理します
設定application.propertiesファイル
#         ,  nginx.conf alias    (D:\user\images)
file.path=/user/images/
#        (      nginx   ,      )
file.prefix=http://127.0.0.1:8081/images

設定nginx.confファイル
 server {
        listen       8081;//  8081  
        server_name  localhost;
        charset utf-8;
        //     
        location /images {
            alias /user/images/;
            expires 1d;
        }

このように構成すると、nginxがhttp://localhost:8081/imagesのパスを傍受すると、http://lcoalhost:8081/user/imagesの下、すなわちD:userimagesディレクトリに代理して画像を探す.
Redisストレージホットスポットデータ
部屋の情報を展示する時私達はホットスポットの部屋の源を表示する必要があって、ここで私達はredisの秩序ある集合を使ってホットスポットの部屋の源の記憶を実現して、ユーザーは部屋の源の詳細を見てredisで熱に対して1をプラスしますRedis Zincrbyコマンドは、順序セット内の指定したメンバーのスコアに増分incrementRedis Zremrangebyrankコマンドを加えて、順序セットを削除し、ランキング区間内のすべてのメンバーを指定します.Redis Zrevrangeコマンドは、区間内のメンバーを指定する順序セットを返します.ここで、メンバーの位置は、数値的に減算(大きいから小さい)されます.RecommendServiceクラス
@Service
public class RecommendService {

    private static final String HOT_HOUSE_KEY = "hot_house";

    @Autowired
    private HouseService houseService;

    /**
     *     +1
     *   : redis            id
     */
    public void increase(Long id) {
        try {
            Jedis jedis = new Jedis("127.0.0.1");
            jedis.auth("123");
            // redis       id     1
            jedis.zincrby(HOT_HOUSE_KEY, 1.0D, id + "");
            //0       ,-1        ,          10 ,     1     11    ,  10      
            jedis.zremrangeByRank(HOT_HOUSE_KEY, 0, -11);
            jedis.close();
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
        }

    }

    //      id
    public List getHot() {
        try {
            Jedis jedis = new Jedis("127.0.0.1");
            jedis.auth("123");
            //               z + reverse + range
            Set idSet = jedis.zrevrange(HOT_HOUSE_KEY, 0, -1);
            jedis.close();
            //Set   List
            List ids = idSet.stream().map(Long::parseLong).collect(Collectors.toList());
            return ids;
        } catch (Exception e) {
            logger.error(e.getMessage(), e);
            return Lists.newArrayList();
        }

    }

    /**
     *       
     */
    public List getHotHouse(Integer size) {//size           
        House query = new House();
        //      id  
        List list = getHot();
        list = list.subList(0, Math.min(list.size(), size));
        if (list.isEmpty()) {
            return Lists.newArrayList();
        }
        query.setIds(list);
        final List order = list;
        //  id        
        List houses = houseService.queryAndSetImg(query, PageParams.build(size, 1));
        //         ,    Ordering  houses   order  id        
        Ordering houseSort = Ordering.natural().onResultOf(hs -> order.indexOf(hs.getId()));
        return houseSort.sortedCopy(houses);
    }